home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 19 / Amiga Plus Leser CD 19.iso / Sound / AmySequencer / AmySequencer2.text < prev    next >
Text File  |  2002-11-13  |  279KB  |  7,021 lines

  1. Versione$="$VER: AmySequencer 0.16 (13.11.2002)"
  2. ;-----------------------
  3. ;versione del programma
  4. ;program version
  5. ;----------------
  6.  
  7. ;-> AmySequencer2 by Stefano Maria Regattin
  8. ;d> 19 gennaio 2002 da AmySequencer
  9. ;m> 20,21,22,23,24,26,30,31 gennaio 2002
  10. ;m> 1,2,3,4,5,6,7,9,10,11,13,15,16,17,18,19,20,22,23,24,27,28 febbraio 2002
  11. ;m> 1,2,3,4,5,6,7,8,10,11,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,31 marzo 2002
  12. ;m> 1,2,4,5,6,8,9,10,11,13,14,19,20,21,22,24,25,28,29,30 aprile 2002
  13. ;m> 4,5,6,8,9,10,11,12,13,14,15,17,18 maggio 2002
  14. ;m> 12,14,15,16,17,20,22,23,28,30 giugno 2002
  15. ;m> 1,3,4,5,9,10,13,15,16 luglio 2002
  16. ;m> 10,13,14,23 agosto 2002
  17. ;m> 2,5,22 settembre 2002
  18. ;m> 8,9,12,16,17,18,20,21,22,23,24,25,26,28 ottobre 2002
  19. ;m> 4,5,6,7,9,12,13 novembre 2002
  20. ;---------------------------------
  21.  
  22. ;------------------------------------------
  23. ;dati per i colori originali dello schermo
  24. ;original screen colours data
  25. ;-----------------------------
  26. Data.b 0,0,0
  27. Data.b 4,4,4
  28. Data.b 8,8,8
  29. Data.b 12,12,12
  30. Data.b 12,0,0
  31. Data.b 12,6,0
  32. Data.b 12,12,0
  33. Data.b 6,12,0
  34. Data.b 0,12,0
  35. Data.b 0,12,6
  36. Data.b 0,12,12
  37. Data.b 0,6,12
  38. Data.b 0,0,12
  39. Data.b 6,0,12
  40. Data.b 12,0,12
  41. Data.b 12,0,6
  42.  
  43. ;------------------------------------------------------------------------
  44. ;il seguente comando indica dove si trovano sul vostro computer i codici
  45. ; sorgenti di Blitz2 da includere in questo programma
  46. ;the following command states the place on your computer where are the Blitz2
  47. ; source codes to be included into this program
  48. ;-----------------------------------------------
  49. INCDIR "Lavoro:Linguaggi/Blitz/"
  50.  
  51. ;-------------------------------------------------------------------------
  52. ;questo comando inserisce una sola volta in questo punto del programma il
  53. ; codice sorgente specificato
  54. ;this command inserts one unique time in this point of the program the
  55. ; specified source code
  56. ;-----------------------
  57. XINCLUDE "MIDIConstants.bb2"
  58.  
  59. ;------------------------------------------------------------------------------
  60. ;le seguenti costanti servono per ricavare il periodo di un canale audio AMIGA
  61. ; dalla frequenza di campionamento; ce ne e' una per gli AMIGA PAL e una per
  62. ; quelli NTSC
  63. ;the following constants are used to obtain an AMIGA audio channel period from the
  64. ; sampling frequency; there is one for PAL AMIGAs and one for NTSC AMIGAs
  65. ;-------------------------------------------------------------------------
  66.  
  67. ;PAL timing
  68. #TemporizzazionePAL=3546895
  69.  
  70. ;NTSC timing
  71. #TemporizzazioneNTSC=3579545
  72.  
  73. ;-------------------------------------------------------------------------
  74. ;questa costante indica il numero di riferimento della fonte di caratteri
  75. ; Topaz8
  76. ;this constant states the characters font Topaz8 referring number
  77. ;-----------------------------------------------------------------
  78. #FonteDiCaratteriTopaz8=0
  79.  
  80. ;-------------------------------------------------------------------------
  81. ;questa variabile imposta il periodo minimo per i canali audio; il limite
  82. ; per i vecchi AMIGA e' 123, ma io ho scelto un periodo minimo di 125, che
  83. ; corrisponde ad un La nella nona ottava
  84. ;this variable sets the audio channels minimum period; on the oldest AMIGA the
  85. ; lowerst usable period is 123, but I have choosen minimum period of 125, that is
  86. ; the A note in the ninth octave
  87. ;--------------------------------
  88. #PeriodoMinimo=125
  89.  
  90. ;---------------------------------------------------------------------------
  91. ;questa costante indica il numero di riferimento della tavolozza dei colori
  92. ; disponibili
  93. ;this constant states the colour palette referring number
  94. ;---------------------------------------------------------
  95. #TavolozzaDeiColori=0
  96.  
  97. ;--------------------------------------------------
  98. ;le seguenti costanti indicano il tipo di finestra
  99. ;the following constants state the window's kind
  100. ;------------------------------------------------
  101.  
  102. ;window sizing gadget
  103. #GadgetRidimensionaFinestra=1
  104.  
  105. ;draggable window
  106. #FinestraMovibile=2
  107.  
  108. ;window depth gadget
  109. #GadgetNascondiFinestra=4
  110.  
  111. ;close gadget
  112. #GadgetChiudiFinestra=8
  113.  
  114. ;sizing window right border (you must set gimme-zero-zero to use it)
  115. #BordoDestraFinestraRidimensionabile=16
  116.  
  117. ;sizing window bottom border (you must set gimme-zero-zero to use it)
  118. #BordoBassoFinestraRidimensionabile=32
  119.  
  120. ;backdrop window
  121. #FinestraDiSfondo=256
  122.  
  123. ;gimme-zero-zero window
  124. #FinestraConMemoriaSfondo=1024
  125.  
  126. ;borderless window
  127. #FinestraSenzaBordi=2048
  128.  
  129. ;window active
  130. #FinestraAttivata=4096
  131.  
  132. ;------------------------------------------------
  133. ;le seguenti costanti indicano il tipo di gadget
  134. ;the following constants state the gadgets' kind
  135. ;------------------------------------------------
  136.  
  137. ;invert
  138. #InvertiGadget=1
  139.  
  140. ;related to window's right side
  141. #PosizioneRelativaAllaDestraDellaFinestra=2
  142.  
  143. ;related to window'w bottom side
  144. #PosizioneRelativaAlBassoDellaFinestra=4
  145.  
  146. ;size as window's inner width
  147. #ComeLarghezzaInternaFinestra=8
  148.  
  149. ;size as window's inner height
  150. #ComeAltezzaInternaFinestra=16
  151.  
  152. ;box select
  153. #ScatolaDaSelezionare=32
  154.  
  155. ;horiziontal movement
  156. #MovimentoOrizzontale=64
  157.  
  158. ;vertical movement
  159. #MovimentoVerticale=128
  160.  
  161. ;no border
  162. #NessunBordo=256
  163.  
  164. ;exclude each other
  165. #SiEscludonoLUnLAltro=512
  166.  
  167. ;attach to window's right side
  168. #AttaccaADestraDellaFinestra=1024
  169.  
  170. ;attach to window's left side
  171. #AttaccaASinistraDellaFinestra=2048
  172.  
  173. ;attach to window's top
  174. #AttaccaAllaFinestraInAlto=4096
  175.  
  176. ;attach to window's bottom
  177. #AttaccaAllaFinestraInBasso=8192
  178.  
  179. ;gimme-zero-zero border gadget
  180. #GadgetConMemoriaBordo=16384
  181.  
  182. ;--------------------------------------------------------
  183. ;le seguenti costanti indicano gli eventi delle finestre
  184. ;the following constants state window events
  185. ;--------------------------------------------
  186.  
  187. ;you have pressed a mouse button
  188. #HaiPremutoUnTastoDelTopo=8
  189.  
  190. ;you have moved the mouse
  191. #HaiMossoIlTopo=16
  192.  
  193. ;you have pressed a gadget
  194. #HaiPremutoUnGadget=32
  195.  
  196. ;you have released a gadget
  197. #HaiRilasciatoUnGadget=64
  198.  
  199. ;you have activated a menu
  200. #HaiAttivatoIlMenu=256
  201.  
  202. ;you have closed the window
  203. #HaiChiusoLaFinestra=512
  204.  
  205. ;you have pressed a key
  206. #HaiPremutoUnTasto=1024
  207.  
  208. ;--------------------------------------------------------
  209. ;le seguenti costanti indicano i tasti cliccati del topo
  210. ;the following constants state the clicked mouse buttons
  211. ;--------------------------------------------------------
  212.  
  213. ;left mouse button pressed
  214. #TastoSinistroPremutoDelTopo=1
  215.  
  216. ;right mouse button pressed
  217. #TastoDestroPremutoDelTopo=2
  218.  
  219. ;left mouse button released
  220. #TastoSinistroDelTopoRilasciato=5
  221.  
  222. ;right mouse button released
  223. #TastoDestroDelTopoRilasciato=6
  224.  
  225. ;-----------------------------------------------------------------------------
  226. ;le seguenti costanti indicano il valore ascii del tasti Backspace, Esc e dei
  227. ; tasti freccia
  228. ;the following constants state the ascii value for the Backspace, Esc and
  229. ; arrow keys
  230. ;------------
  231. #Backspace=8
  232. #Escape=27
  233. #CursorUp=28
  234. #CursorDown=29
  235. #CursorRight=30
  236. #CursorLeft=31
  237.  
  238. ;Backspace key
  239. TastoBackspace$=Chr$(#Backspace)
  240.  
  241. ;Esc key
  242. TastoEsc$=Chr$(#Escape)
  243.  
  244. ;Cursor up key
  245. TastoCursoreSu$=Chr$(#CursorUp)
  246.  
  247. ;Cursor down key
  248. TastoCursoreGiu$=Chr$(#CursorDown)
  249.  
  250. ;Cursor right key
  251. TastoCursoreDestra$=Chr$(#CursorRight)
  252.  
  253. ;Cursor left key
  254. TastoCursoreSinistra$=Chr$(#CursorLeft)
  255.  
  256. ;-----------------------------------------------------------
  257. ;le seguenti costanti indicano i bottoni del joypad premuti
  258. ;the following constants state the joypad pressed buttons
  259. ;---------------------------------------------------------
  260. #_PlayB=1
  261. #_ReverseB=2
  262. #_ForwardB=4
  263. #_GreenB=8
  264. #_YellowB=16
  265. #_RedB=32
  266. #_BlueB=64
  267.  
  268. ;-------------------------------------------------------------------------
  269. ;le seguenti costanti indicano la direzione scelta con il joystick/joypad
  270. ;the following constants state the choosen direction by joystick/joypad
  271. ;-----------------------------------------------------------------------
  272. #JoyMovedUp=0
  273. #JoyMovedRight=2
  274. #JoyMovedDown=4
  275. #JoyMovedLeft=6
  276. #JoyNotMoved=8
  277.  
  278. ;screen
  279. #Schermo=0
  280.  
  281. ;main window
  282. #FinestraPrincipale=0
  283.  
  284. ;main window's gadget list
  285. #ListaGadgetPrincipale=0
  286.  
  287. ;main window's menu list
  288. #ListaMenuPrincipale=0
  289.  
  290. ;sounds editor window
  291. #FinestraEditoreSuoni=1
  292.  
  293. ;sounds editor window's gadget list
  294. #ListaGadgetEditoreSuoni=1
  295.  
  296. ;sound editor window's menu list
  297. #ListaMenuEditoreSuoni=1
  298.  
  299. ;notes editor window
  300. #FinestraEditoreSequenza=2
  301.  
  302. ;notes editor window's gadget list
  303. #ListaGadgetEditoreSequenza=2
  304.  
  305. ;notes editor window's menu list
  306. #ListaMenuEditoreSequenza=2
  307.  
  308. ;note editor window's zonetable
  309. #TabellaZoneEditoreSequenza=0
  310.  
  311. ;window to change basic note length
  312. #FinestraCambioEventoBase=3
  313.  
  314. ;basic note length change window's gadget list
  315. #ListaGadgetCambioEventoBase=3
  316.  
  317. ;slider editore suoni, valore utile qualsiasi maggiore di zero
  318. ;sounds editor's slider, useful value any greater than zero
  319. #SliderEditoreSuoni=1
  320.  
  321. ;basic note change window's zonetable
  322. #TabellaZoneCambioEventoBase=1
  323.  
  324. ;background pic's bitmap
  325. #BitmapImmagineDiSfondo=0
  326.  
  327. ;-------------------------------------------------------------------------
  328. ;queste costanti indicano i cambiamenti che possono essere applicati agli
  329. ; eventi musicali
  330. ;these constants states different changes that can be applied to musical
  331. : events
  332. ;--------
  333.  
  334. ;select a musical event
  335. #SelezionaUnEventoMusicale=0
  336.  
  337. ;change the channel of the selected musical events
  338. #CambiaIlCanaleDegliEventiMusicaliSelezionati=1
  339.  
  340. ;increase by one the selected musical events
  341. #AlzaDiUnoGliEventiMusicaliSelezionati=2
  342.  
  343. ;decrease by one the selected musical events
  344. #AbbassaDiUnoGliEventiMusicaliSelezionati=3
  345.  
  346. ;move forward the selected musical events
  347. #SpostaAvantiNelTempoGliEventiMusicaliSelezionati=4
  348.  
  349. ;move backward the selected musical events
  350. #SpostaIndietroNelTempoGliEventiMusicaliSelezionati=5
  351.  
  352. ;delete the selected musical events
  353. #EliminaGliEventiMusicaliSelezionati=6
  354.  
  355. ;select all the musical events
  356. #SelezionaTuttiGliEventiMusicali=7
  357.  
  358. ;deselect all the musical events
  359. #DeselezionaTuttiGliEventiMusicali=8
  360.  
  361. ;toggle selection of all musical events
  362. #InvertiLaSelezioneDiTuttiGliEventiMusicali=9
  363.  
  364. ;cut all the selected musical events
  365. #TagliaGliEventiMusicaliSelezionati=10
  366.  
  367. ;copy all the selected musical events
  368. #CopiaGliEventiMusicaliSelezionati=11
  369.  
  370. ;paste the previous cutted or copied musical events
  371. #IncollaGliEventiMusicali=12
  372.  
  373. ;forget the previous cutted or copied musical events
  374. #DimenticaGliEventiMusicaliTagliatiOCopiati=13
  375.  
  376. ;select same kind's musical events with the same channel
  377. #SelezionaGliEventiMusicaliUguali=14
  378.  
  379. ;add 10 to the to the event value of the selected musical events that aren't notes
  380. #AggiungiDieciAgliEventiMusicaliSelezionati=15
  381.  
  382. ;sub 10 to the event value of the selected musical events that aren't notes
  383. #SottraiDieciAgliEventiMusicaliSelezionati=16
  384.  
  385. ;put up of one octave the selected notes
  386. #AlzaDiUnOttavaLeNoteSelezionate=17
  387.  
  388. ;put down of one octave the selected notes
  389. #AbbassaDiUnOttavaLeNoteSelezionate=18
  390.  
  391. ;change the value of the selected musical events, that is velocity for notes
  392. #CambiaIlValoreDegliEventiMusicaliSelezionati=19
  393.  
  394. ;increase the selected notes length
  395. #AllungaLaDurataDelleNoteSelezionate=20
  396.  
  397. ;decrease the selected notes length
  398. #RiduciLaDurataDelleNoteSelezionate=21
  399.  
  400. ;add a beat to selected time signature events
  401. #AggiungiUnBattitoAlTempoSelezionato=22
  402.  
  403. ;sub a beat to selected time signature events
  404. #TogliUnBattitoAlTempoSelezionato=23
  405.  
  406. ;add a measure to selected time signature events
  407. #AggiungiUnaMisuraAlTempoSelezionato=24
  408.  
  409. ;sub a measure to selected time signature events
  410. #TogliUnaMisuraAlTempoSelezionato=25
  411.  
  412. ;go to the insertion point
  413. #VaiAlPuntoDInserimento=26
  414.  
  415. ;------------------------------------------------------------------------------
  416. ;le seguenti costanti indicano il modo di disegno delle sequenze  visualizzate
  417. ;the following constants state the displayed sequences drawing mode
  418. ;-------------------------------------------------------------------
  419.  
  420. ;unselected sequence
  421. #SequenzaNonSelezionata=0
  422.  
  423. ;selected sequence
  424. #SequenzaSelezionata=1
  425.  
  426. ;highlighted sequence
  427. #SequenzaEvidenziata=2
  428.  
  429. ;----------------------------------------------------------------------------
  430. ;le seguenti costanti indicano lo stato che un evento musicale puo' assumere
  431. ;the following constants state the status that a musical event can be
  432. ;---------------------------------------------------------------------
  433.  
  434. ;unselected event
  435. #EventoMusicaleNonSelezionato=0
  436.  
  437. ;selected event
  438. #EventoMusicaleSelezionato=1
  439.  
  440. ;cutted event
  441. #EventoMusicaleTagliato=2
  442.  
  443. ;copied event
  444. #EventoMusicaleCopiato=4
  445.  
  446. ;played event
  447. #EventoMusicaleEseguito=8
  448.  
  449. ;ended event
  450. #EventoMusicaleTerminato=16
  451.  
  452. ;----------------------------------------------
  453. ;queste costanti indicano come suonare le note
  454. ;these constants state how to play notes
  455. ;----------------------------------------
  456.  
  457. ;execute events from the main window
  458. #EseguiGliEventiMusicaliDallaFinestraPrincipale=0
  459.  
  460. ;execute events from the sequence editor
  461. #EseguiGliEventiMusicaliDallEditoreSequenza=1
  462.  
  463. ;---------------------------------------------------------------------------
  464. ;le seguenti costanti sono usate dal comando WJam per la selezione del modo
  465. ; grafico
  466. ;the following constants are used by WJam command for the graphic mode
  467. ; selection
  468. ;-----------
  469.  
  470. ;one colour with transparent background
  471. #UnColoreConSfondoTrasparente=0
  472.  
  473. ;two colours with full background
  474. #DueColoriConSfondoPieno=1
  475.  
  476. ;second time same colour
  477. #SecondaVoltaStessoColore=2
  478.  
  479. ;--------------------------------------------------------------
  480. ;le seguenti costanti indicano il tempo base che e' 4/4, cioe'
  481. ; #BattitiDiBase/#MisureDiBase
  482. ;the following constants states the basic time that is 4/4, that is
  483. ; #BattitiDiBase/#MisureDiBase
  484. ;------------------------------
  485.  
  486. ;------------
  487. ;basic beats
  488. ;------------
  489. #BattitiDiBase=4
  490.  
  491. ;---------------
  492. ;basic measures
  493. ;---------------
  494. #MisureDiBase=4
  495.  
  496. ;-----------------------------
  497. ;basic ticks per quarter note
  498. ;-----------------------------
  499. #TicDiBasePerQuarto=192
  500.  
  501. ;---------------------------------
  502. ;basic ticks per sixtyfourth note
  503. ;---------------------------------
  504. #TicDiBasePerSessantaquattresimo=#TicDiBasePerQuarto/16
  505.  
  506. ;---------------
  507. ;tracks maximum
  508. ;---------------
  509. #MassimoTracce=1024
  510.  
  511. ;------------------
  512. ;sequences maximum
  513. ;------------------
  514. #MassimoSequenze=32768
  515.  
  516. #LarghezzaPulsantiEditoreSequenza=16*16+8*5
  517.  
  518. ;          font height, notes invisible area,   selected channel, note increment y, basic event,musical event moved by mouse
  519. DEFTYPE .b AltezzaFonte,AreaInvisibileDelleNote,CanaleSelezionato,IncrementoYNota,  EventoBase, EventoMusicaleSpostatoConIlTopo
  520.  
  521. ;          speech enabled, clicked mouse key,   ticks per sixtyfourth note,visible tracks,AMIGA voice off,visible area start y
  522. DEFTYPE .b ParlatoAttivato,TastoDelTopoCliccato,TicPerSessantaquattresimo ,TracceVisibili,VoceSpenta,     YInizioAreaVisibile
  523.  
  524. ;          editor window inner height,           editor window inner width
  525. DEFTYPE .w AltezzaInternaFinestraEditoreSequenza,LarghezzaInternaFinestraEditoreSequenza
  526.  
  527. ;          main window inner height,        main window inner width
  528. DEFTYPE .w AltezzaInternaFinestraPrincipale,LarghezzaInternaFinestraPrincipale
  529.  
  530. ;          screen height, values visible area,  Active channels,selected musical event,   screen height,   slider width
  531. DEFTYPE .w AltezzaSchermo,AreaVisibileDeiValori,CanaliAttivati, EventoMusicaleSelezionato,LarghezzaSchermo,XLunSlider
  532.  
  533. ;          bars per mins background x,tempo background x,mouse x,slider height,tempo background y,bars per mins background y
  534. DEFTYPE .w XPosSfondoBattutePerMinuto,XPosSfondoTempo,   XTopo,  YLunSlider,   YPosSfondoTempo,   YPosSfondoBattutePerMinuto
  535.  
  536. ;          mouse y
  537. DEFTYPE .w YTopo
  538.  
  539. ;          time invisible area,   sequence duration,events,selected events,  MIDI enabled,Insertion point,  sequence
  540. DEFTYPE .l AreaInvisibileDelTempo,DurataSequenza,   Eventi,EventiSelezionati,MIDIAttivato,PuntoDInserimento,Sequenza
  541.  
  542. ;          selected sequence,  visible area start x
  543. DEFTYPE .l SequenzaSelezionata,XInizioAreaVisibile
  544.  
  545. ;----------------------------------------------------------
  546. ;questa variabile riporta la parte non visibile del motivo
  547. ;this variable reports the non visible motive area
  548. ;--------------------------------------------------
  549. AreaInvisibileDelMotivo.l=0
  550.  
  551. ;-----------------------------------------------------------------------------
  552. ;questa variabile indica la velocita' di esecuzione delle note, indicata come
  553. ; battute al minuto
  554. ;this variable states the notes execution velocity, stated as bars per minute
  555. ;-----------------------------------------------------------------------------
  556. BattutePerMinuto.w=120
  557.  
  558. ;-----------------------------------------------------
  559. ;questa variabile indica i battiti correnti del tempo
  560. ;this variable states the time's current beats
  561. ;----------------------------------------------
  562. Battiti.b=#BattitiDiBase
  563.  
  564. ;----------------------------------------------------------------------------
  565. ;la seguente variabile permette la selezione delle due diverse tavolozze dei
  566. ; colori; se vera (true), i colori saranno quelli originali, se falsa (false)
  567. ; saranno quelli dell'immagine di sfondo a colori
  568. ;the following variable permits the selection of the two different colour
  569. ; palettes; if true the colours will be as original, if false they will be
  570. ; the ones from the coloured pic
  571. ;--------------------------------
  572. ColoriOriginali.b=False
  573.  
  574. ;----------------------------------------------------------------------------
  575. ;questa costante indica il valore per cui bisogna moltiplicare o dividere la
  576. ; frequenza della nota per ricavare rispettivamente la nota successiva o la
  577. ; nota precedente e corrisponde a 2^(1/12), cioe' la radice dodicesima di 2
  578. ;this constant states the value witch it must moltiply or divide the note
  579. ; frequency to obtain respectively the following note or the previous note and
  580. ; corresponds to 2^(1/12), that is the twelfth root of 2
  581. ;--------------------------------------------------------
  582. DistanzaSemitono.f=1.05946309
  583.  
  584. ;------------------------------------------------------------------------------
  585. ;questa variabile, diventando vera (true), vi permette di uscire dal programma
  586. ;this variable, becaming True, let you exit from the program
  587. ;------------------------------------------------------------
  588. EsciDalProgramma.b=False
  589.  
  590. ;------------------------------------------
  591. ;questa variabile indica la fine del brano
  592. ;this variable states song end
  593. ;------------------------------
  594. FineMotivo.l=0
  595.  
  596. ;------------------------------------------------------------------
  597. ;questa variabile indica se e' stata aperta la finestra principale
  598. ;this flag states if the main window is opened
  599. ;----------------------------------------------
  600. FinestraPrincipaleAperta.b=False
  601.  
  602. ;------------------------------------------------------------------------------
  603. ;Questa variabile indica la larghezza di base delle note; puo' essere cambiata
  604. ; secondo i bisogni del momento
  605. ;This variable states the basic notes width; it can be changed depending of
  606. ; the needs of the moment
  607. ;-------------------------
  608. LarghezzaEventoBase.w=#TicDiBasePerQuarto
  609.  
  610. ;-----------------------------------------------------
  611. ;questa variabile indica le misure correnti del tempo
  612. ;this variable states the time's current measures
  613. ;-------------------------------------------------
  614. Misure.b=#MisureDiBase
  615.  
  616. ;--------------------------------------------------------------------------
  617. ;questa variabile indica se gli eventi musicali dello stesso canale devono
  618. ; essere mostrati da soli nell'editore sequenza
  619. ;this variable states if the same channel musical events must be shown alone
  620. ; in the sequence editor
  621. ;------------------------
  622. MostraSoloGliEventiMusicaliDelCanaleSelezionato.b=False
  623.  
  624. ;------------------------------------------------------------------------
  625. ;questa variabile indica se gli eventi musicali dello stesso tipo devono
  626. ; essere mostrati da soli nell'editore sequenza
  627. ;this variable states if the same kind musical events must be shown alone in
  628. ; the sequence editor
  629. ;---------------------
  630. MostraSoloGliEventiMusicaliDelloStessoTipo.b=False
  631.  
  632. ;----------------------------------------------------------------------------
  633. ;questa variabile indica se deve essere mostrato il nuovo valore dell'evento
  634. ; selezionato mosso con il mouse
  635. ;this variable states if the new value of the selected event dragged by mouse
  636. ; must be showed or not
  637. ;-----------------------
  638. MostraNuovoValore.b=False
  639.  
  640. ;---------------------------------------------------------------------------
  641. ;questa variabile sara' maggiore di zero se una nota non e' stata terminata
  642. ;this variable will be greater than zero if one or more notes have not been
  643. ; terminated
  644. ;------------
  645. NoteSuonate.l=0
  646.  
  647. ;--------------------------------------------------------------------
  648. ;questa variabile indica l'ottava visualizzata nell'editore sequenza
  649. ;this variable states the visualized octave in the sequence editor
  650. ;------------------------------------------------------------------
  651. OttavaSelezionata.b=#_MiddleC/12
  652.  
  653. ;-------------------------------------------
  654. ;questa variabile indica la sequenza in uso
  655. ;this variable states the sequence in use
  656. ;-----------------------------------------
  657. Sequenza.l=0
  658.  
  659. ;--------------------------------------------------------------------------
  660. ;questa variabile indica la scala di visualizzazione delgi eventi musicali
  661. ; dell'editore sequenza
  662. ;this variable states the musical events visualization scale of the sequence
  663. ; editor
  664. ;--------
  665. ScalaEventiMusicali.w=1
  666.  
  667. ;--------------------------------------------------------------------------
  668. ;questa variabile indica la sequenza selezionata; se contiene zero nessuna
  669. ; sequenza e' selezionata, altrimenti contiene il numero positivo che
  670. ; identifica la sequenza
  671. ;this variable states the selected sequence; if retains zero no sequence is
  672. ; selected, otherwise retain the positive number that identifies the sequence
  673. ;-----------------------------------------------------------------------------
  674. SequenzaSelezionata=0
  675.  
  676. ;-------------------------------------------------------------------------
  677. ;questa variabile indica se la lista degli ultimi 5 file midi caricati e'
  678. ; stata scritta
  679. ;this flag states if the last 5 loaded MIDI files list has been written
  680. ;-----------------------------------------------------------------------
  681. StoriaDeiFileMIDIAperti.b=False
  682.  
  683. ;------------------------------------------------------------------------------
  684. ;La nota base, il quarto, corrisponde a 192 tic; questa costante indica quanti
  685. ; tic passano in un 50mo di secondo per un tempo di 120 battute per minuto
  686. ;The basic note, the quarter, corresponds to 192 ticks; this constant signs
  687. ; how many ticks takes passes in a 50th of a second for a time of 120 measures
  688. ; per minutes
  689. ;-------------
  690. TicPerCinquantesimoDiSecondo.f=30.72
  691.  
  692. ;--------------------------------------------------------------------------
  693. ;la seguente variabile stringa indica il tipo di evento musicale corrente;
  694. ; all'inizio e' impostata sull'evento nota
  695. ;the following string variable states the current musical event; at the
  696. ; beginning is set on the note event
  697. ;------------------------------------
  698. TipoDiEventoMusicaleDiBase$="Note"
  699.  
  700. ;------------------------------------------------------------------------------
  701. ;questa variabile indica per le note la velocita' di base e per i controlli il
  702. ; valore di base; valore utile da zero a 127
  703. ;this variable states for the notes the basic velocity and for the controls
  704. ; the basic value; useful value from zero to 127
  705. ;------------------------------------------------
  706. ValoreEventoBase.b=64
  707.  
  708. ;-----------------------------------------------------------------------
  709. ;questa variabile indica la posizione della voce Quit del menu' Project
  710. ;this variable marks the position of voice Quit in the Project menu
  711. ;-------------------------------------------------------------------
  712. VoceMenuEsci.b=4
  713.  
  714. ;-------------------------------------------------------------------------
  715. ;questa variabile indica la voce dell'AMIGA che non e' attiva; ogni "uno"
  716. ; corridponde ad una voce di Amiga
  717. ;this variable states the Amiga voice that is not active; each "one" is
  718. ; related to an AMIGA voice
  719. ;---------------------------
  720. VoceSpenta=%1111
  721.  
  722. ;---------------------------------------------------------------------------
  723. ;questa variabile indica la posizione d'inizio per la visualizzazione delle
  724. ; tracce
  725. ;this variables states the start position for the tracks displaying
  726. ;-------------------------------------------------------------------
  727. XTracceVisibili.l=0
  728.  
  729. ;------------------------------------------------------------
  730. ;questa variabile memorizza la prima traccia da visualizzare
  731. ;this variable stores the first track to be displayed
  732. ;-----------------------------------------------------
  733. YTracceVisibili.w=0
  734.  
  735. ;---------------------------------------------------------------------------
  736. ;queste cinque variabili indicizzate conterranno i nomi degli ultimi 5 file
  737. ; MIDI caricati
  738. ;this five indexed variables will keep names of last 5 loaded MIDI files
  739. ;------------------------------------------------------------------------
  740. Dim FileMIDIAperto$(4)
  741.  
  742. ;-----------------------------------------------------------------------------
  743. ;questa struttura di variabili e' una tabella di riferimento per il periodo e
  744. ; la frequenza associati ad ognuna delle 128 note possibili
  745. ;this variables structure is a refferring table for the periode and frequency
  746. ; paired to every one of the 128 given notes
  747. ;--------------------------------------------
  748. NEWTYPE .PeriFreq
  749.  
  750. ;--------
  751. ;periode
  752. ;--------
  753.  Periodo.l
  754.  
  755. ;----------
  756. ;frequency
  757. ;----------
  758.  Frequenza.f
  759. End NEWTYPE
  760. Dim PeriFreq.PeriFreq(127)
  761.  
  762. ;--------------------------------------------------------------------------
  763. ;la seguente struttura di variabili serve per identificare il tipo di note
  764. ;the following variables structure is used to states the notes kind
  765. ;-------------------------------------------------------------------
  766. NEWTYPE .TipoDiNota
  767.  
  768. ;note italian name
  769.  NomeItaliano$
  770.  
  771. ;note english name
  772.  NomeInglese$
  773.  
  774. ;diesis flag
  775.  Diesis.b
  776.  
  777. ;note octave
  778.  Ottava.b
  779. End NEWTYPE
  780. Dim TipoDiNota.TipoDiNota(127)
  781.  
  782. ;----------------------------------------------------------------------------
  783. ;la seguente struttura di variabili e' per la gestione dei suoni per l'Amiga
  784. ;the following variables structure is for Amiga sounds management
  785. ;-----------------------------------------------------------------
  786. NEWTYPE .Suono
  787.  
  788. ;---------------------------------------------------
  789. ;questa variabile indica il nome del suono caricato
  790. ;this variable states the name of the loaded sound
  791. ;--------------------------------------------------
  792.  Nome$
  793.  
  794. ;----------------------------------------------------------------------------
  795. ;questa variabile indica il canale associato al suono caricato; valore utile
  796. ; da 1 a 16, o zero se nessun canale e' associato al suono
  797. ;this variable states the channel linked to the loaded sound; useful value
  798. ; from 1 to 16, or zero if no channel is assigned to the sound
  799. ;--------------------------------------------------------------
  800.  Canale.b
  801.  
  802. End NEWTYPE
  803. Dim Suono.Suono(31)
  804.  
  805. NEWTYPE .Sequenza
  806.  
  807. ;--------------------------------------------------
  808. ;questa variabile memorizza il nome della sequenza
  809. ;this variable stores the sequence name
  810. ;---------------------------------------
  811. Nome$
  812.  
  813. ;----------------------------------------------------------
  814. ;questa variabile indica l'inizio temporale della sequenza
  815. ;this variable states the sequence time start
  816. ;---------------------------------------------
  817. Inizio.l
  818.  
  819. ;-----------------------------------------------------------
  820. ;questa variabile indica la durata temporale della sequenza
  821. ;this variable states the sequence time duration
  822. ;------------------------------------------------
  823. Durata.l
  824.  
  825. ;--------------------------------------------------------------------
  826. ;questa variabile indica la traccia di appartenenenza della sequenza
  827. ;this variable states the track that the sequence is belonging to
  828. ;-----------------------------------------------------------------
  829. Traccia.w
  830.  
  831. ;------------------------------------------------------------------
  832. ;questa variabile indica gli eventi musicali totali della sequenza
  833. ;this variable states the sequence's total musical events
  834. ;---------------------------------------------------------
  835. EventiMusicali.l
  836.  
  837. ;-----------------------------------------------------------------------
  838. ;questa variabile indica gli eventi musicali selezionati della sequenza
  839. ;this variable states the sequence's selected musical events
  840. ;------------------------------------------------------------
  841. EventiMusicaliSelezionati.l
  842.  
  843. End NEWTYPE
  844. Dim List Sequenza.Sequenza(#MassimoSequenze-1)
  845.  
  846. ;------------------------------------------------------------------------
  847. ;queste variabili indicizzate indicano True (Vero) se la traccia esiste,
  848. ; altrimenti indicano False (Falso)
  849. ;these indexed variables (arrays) state True if track exist, otherwise state
  850. ; False
  851. ;-------
  852. Dim Traccia.b(#MassimoTracce-1)
  853.  
  854. ;----------------------------------------------------------------------------
  855. ;la seguente struttura di variabili e' per la gestione degli eventi musicali
  856. ;the following vars structure is for the musical events management
  857. ;------------------------------------------------------------------
  858. NEWTYPE .EventoMusicale
  859.  
  860. ;----------------------------------------------------------------------------
  861. ;questa variabile stringa indica il tipo di evento musicale, che puo' essere
  862. ; una nota od un parametro MIDI
  863. ;This string variable states the musical event kind, that can be a note or a
  864. ; MIDI parameter
  865. ;----------------
  866.  Tipo$
  867.  
  868. ;-----------------------------------------------------------------------
  869. ;se l'evento musicale e' una nota, questa variabile ne indica l'altezza;
  870. ; valore utile da zero a 127
  871. ;if the event is a note, this variable states its height; useful value from
  872. ;zero to 127
  873. ;------------
  874.  Evento.b
  875.  
  876. ;--------------------------------------------------------------------------
  877. ;se l'evento musicale e'una nota, questa variabile ne indica l'intensita',
  878. ;cioe' il suo volume; se invece l'evento e' un controllo ne indica il valore
  879. ;if the musical event is a note, this variable states its intensity, that is
  880. ; its volume; if instead is a control it states its value
  881. ;---------------------------------------------------------
  882.  Valore.b
  883.  
  884. ;----------------------------------------------------------------------------
  885. ;questa variabile indica la posizione dell'evento musicale nel tempo in tic;
  886. ; valore utile da zero a 2 miliardi e rotti
  887. ;this variable states musical event position in time by ticks; useful value
  888. ;from zero to over 2 billions
  889. ;-----------------------------
  890.  Inizio.l
  891.  
  892. ;------------------------------------------------------------------------------
  893. ;se l'evento musicale e' una nota, questa variabile ne indica in tic la durata
  894. ; nel tempo; valore utile da 0 a 2 miliardi e rotti (192 tic=nota di un quarto)
  895. ;if the event is a note, this variable states its duration in time by ticks;
  896. ;useful value from zero to over 2 billions (192 ticks=a quarter note)
  897. ;---------------------------------------------------------------------
  898.  Durata.l
  899.  
  900. ;------------------------------------------------------------------------------
  901. ;questa varibile indica il canale dell'evento musicale; valore utile da 1 a 16
  902. ;this variable states musical event's channel; useful value from 1 to 16
  903. ;------------------------------------------------------------------------
  904.  Canale.b
  905.  
  906. ;-----------------------------------------------------------------------------
  907. ;questa variabile identifica la sequenza di appartenenza dell'evento musicale
  908. ; valore utile da 1 a 32768
  909. ;this variable states the sequence witch the musical event belong to: useful
  910. ; value from 1 to 32768
  911. ;-----------------------
  912.  Sequenza.l
  913.  
  914. ;----------------------------------------------------------------------------
  915. ;questa variabile indica se l'evento musicale e' stato selezionato, tagliato
  916. ; copiato, eseguito o terminato, piu' precisamente:
  917. ; 0=evento non selezionato
  918. ; 1=evento selezionato
  919. ; +2=evento tagliato
  920. ; +4=evento copiato
  921. ; +8=evento eseguito
  922. ; +16=evento terminato
  923. ;this variable states if the musical event has been selected, cutted, copied
  924. ; executed or terminatted, more precisely:
  925. ; 0=unselected event
  926. ; 1=selected event
  927. ; +2=cutted event
  928. ; +4=copied event
  929. ; +8=executed event
  930. ; +16=ended event
  931. ;-----------------
  932.  Stato.b
  933.  
  934. End NEWTYPE
  935.  
  936. DEFTYPE .EventoMusicale NotaSuonata
  937.  
  938. ;-----------------------------------------------------
  939. ;imposta il numero massimo di eventi musicali usabili
  940. ;sets the maximun musical events handling
  941. ;-----------------------------------------
  942. MassimoEventiMusicali.l=Min((FastFree-65536)/SizeOf .EventoMusicale,32768)
  943.  
  944. ;---------------------------------------------------------------------------
  945. ;crea le variabili array lista con la struttura del NEWTYPE .EventoMusicale
  946. ;creates the list array variables with the NEWTYPE .EventoMusicale structure
  947. ;----------------------------------------------------------------------------
  948. Dim List EventoMusicale.EventoMusicale(MassimoEventiMusicali-1)
  949.  
  950. ;-----------------------------------------------------------------
  951. ;questa variabile indica se e' stato attivato un dispositivo MIDI
  952. ;this variable states if a MIDI device has been activated
  953. ;---------------------------------------------------------
  954. MIDIAttivato.l=0
  955.  
  956. ;------------------------------------------------------------------------------
  957. ;questa variabile indica se si entra nell'editore sequenza per la prima volta,
  958. ; per mostrare i requester che riportano i tasti utili
  959. ;this variable states if you enters in the sequence editor for the first time,
  960. ; to show the requesters that show the useful keys
  961. ;--------------------------------------------------
  962. PrimaVoltaNellEditoreSequenza.b=True
  963.  
  964. ;--------------------------------------------------------------------------
  965. ;questa procedura imposta la fonte di caratteri Topaz8 per schermo, menu e
  966. ; requester, ma non per le finestre
  967. ;this procedure sets the characters font Topaz8 for screen, menus and
  968. ; requester, but not for windows
  969. ;--------------------------------
  970. Statement CaricaLaFonteDiCaratteriTopaz8{}
  971. SHARED AltezzaFonte
  972.  AltezzaFonte=8:LoadFont #FonteDiCaratteriTopaz8,"topaz.font",AltezzaFonte
  973. End Statement
  974.  
  975. ;------------------------------------------------------------
  976. ;questa procedura imposta il parlato dell'AMIGA se possibile
  977. ;this procedure sets the AMIGA speech if it is possible
  978. ;-------------------------------------------------------
  979. Statement ImpostaIlParlatoDellAmiga{}
  980. SHARED ParlatoAttivato
  981.  If Exists("LIBS:translator.library") AND Exists("DEVS:narrator.device")
  982.   SetVoice 130,250,0,1,64,22200
  983.   Speak "Speech is enabled!"
  984.   ParlatoAttivato=True
  985.  Else
  986.   Messaggio$="Unable to set speech,|"
  987.   Messaggio$+"required files:|"
  988.   Messaggio$+"LIBS:translator.library|"
  989.   Messaggio$+"DEVS:narrator.device|"
  990.   Messaggio$+"These are supplied with|"
  991.   Messaggio$+"the workbench 1.2|"
  992.   Messaggio$+"Search on Aminet their|"
  993.   Messaggio$+"third part improvement|"
  994.   EZRequest "AmySequencer message",Messaggio$,"OK"
  995.   ParlatoAttivato=False
  996.  EndIf
  997. End Statement
  998.  
  999. ;-----------------------------------------------
  1000. ;questa procedura carica le immagini delle note
  1001. ;this procedure loads the note images
  1002. ;-------------------------------------
  1003. Statement CaricaLeImmaginiDelleNote{}
  1004.  BitMap 0,126,16,1
  1005.  LoadBitMap 0,"Notes.2Cols"
  1006.  GetaShape 0,0,0,22,16
  1007.  GetaShape 1,23,0,12,16
  1008.  GetaShape 2,36,0,12,16
  1009.  GetaShape 3,49,0,17,16
  1010.  GetaShape 4,67,0,17,16
  1011.  GetaShape 5,85,0,17,16
  1012.  GetaShape 6,103,0,17,16
  1013.  GetaShape 7,121,0,5,16
  1014.  Free BitMap 0
  1015. End Statement
  1016.  
  1017. ;----------------------------------------------
  1018. ;questa procedura attiva la comunicazione MIDI
  1019. ;this procedure activates the MIDI communication
  1020. ;------------------------------------------------
  1021. Statement AttivaMIDI{}
  1022. SHARED MIDIAttivato
  1023.  Use Window #FinestraPrincipale
  1024.  WJam #DueColoriConSfondoPieno
  1025.  Repeat
  1026.   If MIDIAttivato=True Then CloseSerial 0
  1027.   WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1028.   WLocate 0,0:WColour 3,0:Print "Please type your MIDI device name>"
  1029.   DispositivoMIDI$=StripLead$(StripTrail$(Edit$("serial.device",35),Asc(" ")),Asc(" "))
  1030.   WLocate 0,0:Print SPACE$(80)
  1031.   If DispositivoMIDI$<>""
  1032.    MIDIAttivato=OpenSerial(DispositivoMIDI$,0,31250,16)
  1033.    If MIDIAttivato=0
  1034.     EZRequest "AmySequencer message","Unable to open MIDI|on "+DispositivoMIDI$,"OK"
  1035.    Else
  1036.     SetSerialBuffer 0,64
  1037.     MIDIAttivato=True
  1038.    EndIf
  1039.   EndIf
  1040.  Until MIDIAttivato=True
  1041.  EZRequest "AmySequencer message","MIDI has been activated|on "+DispositivoMIDI$,"OK"
  1042.  WJam #UnColoreConSfondoTrasparente
  1043. End Statement
  1044.  
  1045. ;-------------------------------------------------
  1046. ;questa procedura cambia la misurazione del tempo
  1047. ;this procedure change the time misuration
  1048. ;------------------------------------------
  1049. Statement CambiaLaMisuraDelTempo{}
  1050. SHARED Battiti
  1051. SHARED Misure
  1052.  Use Window #FinestraPrincipale
  1053.  WJam #DueColoriConSfondoPieno
  1054.  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1055.  WLocate 0,0:WColour 3,0:Print "Please type the basic time beat>"
  1056.  Battiti=Val(StripLead$(StripTrail$(Edit$("4",35),Asc(" ")),Asc(" ")))
  1057.  Battiti=Min(Max(Battiti,1),16)
  1058.  WLocate 0,0:Print SPACE$(80)
  1059.  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1060.  WLocate 0,0:WColour 3,0:Print "Please type the basic time measures>"
  1061.  Misure=Val(StripLead$(StripTrail$(Edit$("4",35),Asc(" ")),Asc(" ")))
  1062.  Misure=Min(Max(Misure,1),8)
  1063.  WJam #UnColoreConSfondoTrasparente
  1064. End Statement
  1065.  
  1066. ;--------------------------------------------------------
  1067. ;questa procedura mostra gli eventi musicali disponibili
  1068. ;this procedure shows the available musical events
  1069. ;--------------------------------------------------
  1070. Statement MostraGliEventiMusicaliDisponibili{}
  1071. SHARED MassimoEventiMusicali
  1072. SHARED Sequenza()
  1073. SHARED TotaleEventiMusicali
  1074.  Sequenze.w=0
  1075.  TotaleEventiMusicali=0
  1076.  PushItem Sequenza()
  1077.  ResetList Sequenza()
  1078.  While NextItem(Sequenza())=True
  1079.   If Sequenza()\Durata>0
  1080.    TotaleEventiMusicali+Sequenza()\EventiMusicali
  1081.    Sequenze+1
  1082.   EndIf
  1083.  Wend
  1084.  PopItem Sequenza()
  1085.  WLocate 0,0:WColour 3,0:Print MassimoEventiMusicali," events allocated, ",TotaleEventiMusicali," event"
  1086.  If TotaleEventiMusicali<>1 Then Print "s"
  1087.  Print " used, "
  1088.  If Sequenze>0
  1089.   Print Str$(Sequenze)," sequence":If Sequenze>1 Then Print "s"
  1090.  Else
  1091.   Print "no sequences"
  1092.  EndIf
  1093. End Statement
  1094.  
  1095. ;-------------------------------------------------------------------
  1096. ;mostra la velocita' di esecuzione delle note in battute per minuto
  1097. ;shows the execution velocity in measures per minute
  1098. ;----------------------------------------------------
  1099. Statement MostraLeBattutePerMinuto{BattutePerMinuto.w,CanaleEvento.b,Modo.b}
  1100. SHARED AltezzaInternaFinestraEditoreSequenza
  1101. SHARED AltezzaInternaFinestraPrincipale
  1102. SHARED XPosSfondoBattutePerMinuto
  1103. SHARED YPosSfondoBattutePerMinuto
  1104.  TicPerCinquantesimoDiSecondo.f=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  1105.  WJam #DueColoriConSfondoPieno
  1106.  If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  1107.   XMessaggio.w=0
  1108.   YMessaggio.w=AltezzaInternaFinestraPrincipale-8-8
  1109.   WLocate XMessaggio,YMessaggio
  1110.   Print SPACE$(Len("BPM>000-ticks/50th>000.0"))
  1111.   WBlit 8,XPosSfondoBattutePerMinuto,YPosSfondoBattutePerMinuto
  1112.   WJam #UnColoreConSfondoTrasparente:WColour 3
  1113.  EndIf
  1114.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  1115.   WColour CanaleEvento-1,16-CanaleEvento
  1116.   XMessaggio=#LarghezzaPulsantiEditoreSequenza
  1117.   YMessaggio=AltezzaInternaFinestraEditoreSequenza-8
  1118.   Print SPACE$(80-XMessaggio/8)
  1119.  EndIf
  1120.  WLocate XMessaggio,YMessaggio
  1121.  Format "000":Print "BPM>",BattutePerMinuto
  1122.  Format "000.0":Print"-ticks/50th>",TicPerCinquantesimoDiSecondo
  1123.  Format ""
  1124.  
  1125. End Statement
  1126.  
  1127. ;------------------------------------------------------
  1128. ;questa procedura mostra il tempo in battiti su misure
  1129. ;this procedure shows the tempo by beats per measures
  1130. ;-----------------------------------------------------
  1131. Statement MostraIlTempo{Tempo.b,CanaleEvento.b,Modo.b}
  1132. SHARED AltezzaInternaFinestraEditoreSequenza
  1133. SHARED AltezzaInternaFinestraPrincipale
  1134. SHARED XPosSfondoTempo
  1135. SHARED YPosSfondoTempo
  1136.  WJam #DueColoriConSfondoPieno
  1137.  If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  1138.   XMessaggio.w=(80-Len("Tempo00/00"))*8
  1139.   YMessaggio.w=AltezzaInternaFinestraPrincipale-8-8
  1140.   WLocate XMessaggio,YMessaggio
  1141.   Print SPACE$(Len("Tempo00/00"))
  1142.   WBlit 9,XPosSfondoTempo,YPosSfondoTempo
  1143.   WJam #UnColoreConSfondoTrasparente:WColour 3
  1144.  EndIf
  1145.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  1146.   WColour CanaleEvento-1,16-CanaleEvento
  1147.   XMessaggio=#LarghezzaPulsantiEditoreSequenza
  1148.   YMessaggio=AltezzaInternaFinestraEditoreSequenza-8
  1149.   Print SPACE$(80-XMessaggio/8)
  1150.  EndIf
  1151.  WLocate XMessaggio,YMessaggio
  1152.  Format "00":Print "Tempo",Str$(Tempo MOD 16+1),"/",Str$(Tempo/16+1):Format ""
  1153. End Statement
  1154.  
  1155. ;----------------------------------------------------------------------------
  1156. ;questa procedura crea una tabella di riconoscimento delle note, memorizzata
  1157. ; nell'array TipoDiNota()
  1158. ;this procedure crates a referring note recognition table, stored in the
  1159. ; TipoDiNota() array (that means Note Kind)
  1160. ;-------------------------------------------
  1161. Statement ImpostaIlTipoDiNota{Nota.b}
  1162. SHARED TipoDiNota()
  1163.  
  1164. ;--------------------------------------------
  1165. ;questa variabile indica l'ottava della nota
  1166. ;this variable state the note octave
  1167. ;------------------------------------
  1168.  OttavaDellaNota.b=Nota/12
  1169.  
  1170.  TipoDiNota(Nota)\Ottava=OttavaDellaNota
  1171.  
  1172. ;-----------------------------------------------------------------------
  1173. ;questa variabile indica a quali delle 12 note dodici note fondamentali
  1174. ; corrisponde la nota corrente
  1175. ;this variable marks which of 12 fundamental notes corresponds the current
  1176. ; note
  1177. ;------
  1178.  NotaNellOttava.b=Nota MOD 12
  1179.  
  1180.  Select NotaNellOttava
  1181.  
  1182. ;------------------
  1183. ;la nota e' un Do?
  1184. ;is the given note a C?
  1185. ;-----------------------
  1186.  Case 0
  1187.   TipoDiNota(Nota)\NomeItaliano="Do"
  1188.   TipoDiNota(Nota)\NomeInglese="C"
  1189.   TipoDiNota(Nota)\Diesis=False
  1190.  
  1191. ;-------------------------------
  1192. ;la nota e' un Do diesis (Do#)?
  1193. ;is the given note a C diesis (C#)?
  1194. ;-----------------------------------
  1195.  Case 1
  1196.   TipoDiNota(Nota)\NomeItaliano="Do#"
  1197.   TipoDiNota(Nota)\NomeInglese="C#"
  1198.   TipoDiNota(Nota)\Diesis=True
  1199.  
  1200. ;------------------
  1201. ;la nota e' un Re?
  1202. ;is the given note a D?
  1203. ;-----------------------
  1204.  Case 2
  1205.   TipoDiNota(Nota)\NomeItaliano="Re"
  1206.   TipoDiNota(Nota)\NomeInglese="D"
  1207.   TipoDiNota(Nota)\Diesis=False
  1208.  
  1209. ;-------------------------------
  1210. ;la nota e' un Re diesis (Re#)?
  1211. ;is the given note a D diesis (D#)?
  1212. ;-----------------------------------
  1213.  Case 3
  1214.   TipoDiNota(Nota)\NomeItaliano="Re#"
  1215.   TipoDiNota(Nota)\NomeInglese="D#"
  1216.   TipoDiNota(Nota)\Diesis=True
  1217.  
  1218. ;------------------
  1219. ;la nota e' un Mi?
  1220. ;is the given note a E?
  1221. ;-----------------------
  1222.  Case 4
  1223.   TipoDiNota(Nota)\NomeItaliano="Mi"
  1224.   TipoDiNota(Nota)\NomeInglese="E"
  1225.   TipoDiNota(Nota)\Diesis=False
  1226.  
  1227. ;------------------
  1228. ;la nota e' un Fa?
  1229. ;is the given note a F?
  1230. ;-----------------------
  1231.  Case 5
  1232.   TipoDiNota(Nota)\NomeItaliano="Fa"
  1233.   TipoDiNota(Nota)\NomeInglese="F"
  1234.   TipoDiNota(Nota)\Diesis=False
  1235.  
  1236. ;-------------------------------
  1237. ;la nota e' un Fa diesis (Fa#)?
  1238. ;is the given note a F diesis (F#)?
  1239. ;-----------------------------------
  1240.  Case 6
  1241.   TipoDiNota(Nota)\NomeItaliano="Fa#"
  1242.   TipoDiNota(Nota)\NomeInglese="F#"
  1243.   TipoDiNota(Nota)\Diesis=True
  1244.  
  1245. ;-------------------
  1246. ;la nota e' un Sol?
  1247. ;is the given note a G?
  1248. ;-----------------------
  1249.  Case 7
  1250.   TipoDiNota(Nota)\NomeItaliano="Sol"
  1251.   TipoDiNota(Nota)\NomeInglese="G"
  1252.   TipoDiNota(Nota)\Diesis=False
  1253.  
  1254. ;---------------------------------
  1255. ;la nota e' un Sol diesis (Sol#)?
  1256. ;is the given note a G diesis (G#)?
  1257. ;-----------------------------------
  1258.  Case 8
  1259.   TipoDiNota(Nota)\NomeItaliano="Sol#"
  1260.   TipoDiNota(Nota)\NomeInglese="G#"
  1261.   TipoDiNota(Nota)\Diesis=True
  1262.  
  1263. ;------------------
  1264. ;la nota e' un La?
  1265. ;is the given note an A?
  1266. ;------------------------
  1267.  Case 9
  1268.   TipoDiNota(Nota)\NomeItaliano="La"
  1269.   TipoDiNota(Nota)\NomeInglese="A"
  1270.   TipoDiNota(Nota)\Diesis=False
  1271.  
  1272. ;-------------------------------
  1273. ;la nota e' un La diesis (La#)?
  1274. ;is the given note an A diesis (A#)?
  1275. ;------------------------------------
  1276.  Case 10
  1277.   TipoDiNota(Nota)\NomeItaliano="La#"
  1278.   TipoDiNota(Nota)\NomeInglese="A#"
  1279.   TipoDiNota(Nota)\Diesis=True
  1280.  
  1281. ;------------------
  1282. ;la nota e' un Si?
  1283. ;is the given note a B?
  1284. ;-----------------------
  1285.  Case 11
  1286.   TipoDiNota(Nota)\NomeItaliano="Si"
  1287.   TipoDiNota(Nota)\NomeInglese="B"
  1288.   TipoDiNota(Nota)\Diesis=False
  1289.  
  1290.  End Select
  1291. End Statement
  1292.  
  1293. Statement CalcolaLaFrequenzaEdIlPeriodoDelleNote{}
  1294. SHARED PeriFreq()
  1295. SHARED DistanzaSemitono
  1296. ;-------------------------------------------------------------------------
  1297. ;per ottenere la frequenza di tutte le 128 note, si parte dal La della 4a
  1298. ; ottava (la prima e' l'ottava zero), la cui frequenza e' nota e la si
  1299. ; moltiplica o divide per la distanza minima tra due note che e' il semitono;
  1300. ; per ottenere il periodo si divide una delle costanti di temporizzazione, a
  1301. ; seconda che il il proprio AMIGA usi uno schermo PAL o NTSC, per la frequenza
  1302. ; della nota; queste costanti sono riportate sul MANUALE DI RIFERIMENTO PER
  1303. ; L'HARDWARE AMIGA
  1304. ;to obtain all 128 notes it starts from the A from the 4rd octave (the 1st is
  1305. ; the zero octave) that has a known frequency, and it multiply or divide this
  1306. ; for the minimum distance between two notes that is the semitone; to obtain
  1307. ; the period it divides one of the timing constants, depending on your AMIGA
  1308. ; uses a PAL or NTSC screen, for the note frequency; these constants are
  1309. ; reported on the AMIGA HARDWARE REFERENCE MANUAL
  1310. ;-------------------------------------------------
  1311. PeriFreq(45)\Frequenza=440
  1312. If NTSC=True
  1313.  PeriFreq(45)\Periodo=#TemporizzazioneNTSC/PeriFreq(45)\Frequenza
  1314. Else
  1315.  PeriFreq(45)\Periodo=#TemporizzazionePAL/PeriFreq(45)\Frequenza
  1316. EndIf
  1317. ImpostaIlTipoDiNota{45}
  1318.  
  1319. For Nota.w=46 To 127
  1320.  PeriFreq(Nota)\Frequenza=PeriFreq(Nota-1)\Frequenza*DistanzaSemitono
  1321.  If NTSC=True
  1322.   PeriFreq(Nota)\Periodo=#TemporizzazioneNTSC/PeriFreq(Nota)\Frequenza
  1323.  Else
  1324.   PeriFreq(Nota)\Periodo=#TemporizzazionePAL/PeriFreq(Nota)\Frequenza
  1325.  EndIf
  1326.  ImpostaIlTipoDiNota{Nota}
  1327. Next Nota
  1328.  
  1329. For Nota=44 To 0 Step -1
  1330.  PeriFreq(Nota)\Frequenza=PeriFreq(Nota+1)\Frequenza/DistanzaSemitono
  1331.  If NTSC=True
  1332.   PeriFreq(Nota)\Periodo=#TemporizzazioneNTSC/PeriFreq(Nota)\Frequenza
  1333.  Else
  1334.   PeriFreq(Nota)\Periodo=#TemporizzazionePAL/PeriFreq(Nota)\Frequenza
  1335.  EndIf
  1336.  ImpostaIlTipoDiNota{Nota}
  1337. Next Nota
  1338. End Statement
  1339.  
  1340. ;------------------------------------------------------------------------------
  1341. ;la seguente procedura converte un valore temporale da tic in battute, battiti
  1342. ; e tic; la variabile OrigineZero serve per la differente visualizzazione
  1343. ; della durata delle note che, se vera, parte da zero
  1344. ;the following procedure converts a time value from ticks into bars, beats and
  1345. ; ticks; the OrigineZero variable is used for the different note length
  1346. ; displacement that, if this is true, starts from zero instead of starting
  1347. ; from one
  1348. ;----------
  1349. Statement ConvertiIlTempoInBattute{Tempo.l,Battiti.b,Misure.b,OrigineZero.b}
  1350.  If OrigineZero=True
  1351.   Battuta.l=Tempo/(#TicDiBasePerQuarto*4.0*Battiti)/Misure
  1352.   Battito.b=(Tempo/(#TicDiBasePerQuarto/(Misure/4.0))) MOD Battiti
  1353.  Else
  1354.   Battuta=Tempo/(#TicDiBasePerQuarto*4.0*Battiti)/Misure+1
  1355.   Battito=(Tempo/(#TicDiBasePerQuarto/(Misure/4.0))) MOD Battiti+1
  1356.  EndIf
  1357.  Print Battuta,".",Battito
  1358.  Tic.w=Tempo MOD (#TicDiBasePerQuarto/(Misure/4.0))
  1359.  If Tic>0 Then Print ".",Tic
  1360. End Statement
  1361.  
  1362. ;-------------------------------------------------
  1363. ;questa procedura imposta le barre di scorrimento
  1364. ;this procedure sets sliders
  1365. ;----------------------------
  1366. Statement ImpostaSlider{Slider.l,XPos.w,YPos.w,Orientamento$,Parametri.l,ListaGadgetSlider.l}
  1367. SHARED XLunSlider
  1368. SHARED YLunSlider
  1369.  Orientamento$=UCase$(Orientamento$)
  1370.  If Orientamento$="HORIZONTAL" Then Parametri+#MovimentoOrizzontale
  1371.  If Orientamento$="VERTICAL" Then Parametri+#MovimentoVerticale
  1372.  PropGadget ListaGadgetSlider,XPos,YPos,Parametri,Slider,XLunSlider,YLunSlider
  1373. End Statement
  1374.  
  1375. ;------------------------------------------------
  1376. ;questa procedura mostra le barre di scorrimento
  1377. ;this procedure showss the sliders
  1378. ;----------------------------------
  1379. Statement MostraSlider{Slider.l,ValoreDato.l,ValoreMassimo.l,Orientamento$,ListaGadgetSlider.l,FinestraSlider.l}
  1380.  Orientamento$=UCase$(Orientamento$)
  1381.  If Orientamento$="HORIZONTAL"
  1382.   SetHProp ListaGadgetSlider,Slider,ValoreDato/ValoreMassimo,1/ValoreMassimo
  1383.  EndIf
  1384.  If Orientamento$="VERTICAL"
  1385.   SetVProp ListaGadgetSlider,Slider,ValoreDato/ValoreMassimo,1/ValoreMassimo
  1386.  EndIf
  1387.  Redraw FinestraSlider,Slider
  1388. End Statement
  1389.  
  1390. ;--------------------------------------------------
  1391. ;questa procedura gestisce le barre di scorrimento
  1392. ;this procedure manage the sliders
  1393. ;----------------------------------
  1394. Function .l ValoreSlider{Slider.l,ValoreMassimo.l,LunghezzaSlider.l,Orientamento$,ListaGadgetSlider.l}
  1395.  Orientamento$=UCase$(Orientamento$)
  1396.  If Orientamento$="HORIZONTAL"
  1397.   ValoreSlider.f=HPropPot(ListaGadgetSlider,Slider)*ValoreMassimo
  1398.   ValoreIndicatoDalTopo.w=EMouseX*ValoreMassimo/LunghezzaSlider
  1399.  EndIf
  1400.  If Orientamento$="VERTICAL"
  1401.   ValoreSlider=VPropPot(ListaGadgetSlider,Slider)*ValoreMassimo
  1402.   ValoreIndicatoDalTopo=EMouseY*ValoreMassimo/LunghezzaSlider
  1403.  EndIf
  1404.  ValoreIndicatoDalloSlider.l=Int(ValoreSlider)
  1405.  If ValoreIndicatoDalTopo>ValoreIndicatoDalloSlider Then ValoreIndicatoDalloSlider+1
  1406.  If ValoreIndicatoDalTopo<ValoreIndicatoDalloSlider Then ValoreIndicatoDalloSlider-1
  1407.  ValoreIndicatoDalloSlider=Min(Max(ValoreIndicatoDalloSlider,0),ValoreMassimo)
  1408.  Function Return ValoreIndicatoDalloSlider
  1409. End Function
  1410.  
  1411. ;---------------------------------------------------------------------------
  1412. ;questa procedura cancella il file storico degli ultimi 5 MIDI file  aperti
  1413. ;this procedure clears the last 5 loaded MIDI files history file
  1414. ;----------------------------------------------------------------
  1415. Statement CancellaLaStoriaDeiFileMIDIAperti{}
  1416. SHARED FileMIDIAperto$()
  1417. SHARED StoriaDeiFileMIDIAperti
  1418. SHARED VoceMenuEsci
  1419.  KillFile "LoadedMIDIFilesHistory"
  1420.  VoceMenuEsci=4
  1421.  StoriaDeiFileMIDIAperti=False
  1422.  For FileMIDIAperto.b=0 To 4
  1423.   FileMIDIAperto$(FileMIDIAperto)=""
  1424.  Next FileMIDIAperto
  1425. End Statement
  1426.  
  1427. ;------------------------------------------------------------------------
  1428. ;questa procedura carica il file storico degli ultimi 5 file MIDI aperti
  1429. ;this procedure loads the last 5 loaded MIDI files history file
  1430. ;---------------------------------------------------------------
  1431. Statement CaricaLaStoriaDeiFileMIDIAperti{}
  1432. SHARED FileMIDIAperto$()
  1433. SHARED StoriaDeiFileMIDIAperti
  1434. SHARED VoceMenuEsci
  1435.  StoriaDeiFileMIDIAperti=ReadFile(0,"LoadedMIDIFilesHistory")
  1436.  If StoriaDeiFileMIDIAperti=True
  1437.   FileInput 0
  1438.   FileMIDIAperto.b=0
  1439.   Repeat
  1440.    Dato$=Inkey$
  1441.    If Dato$=Chr$(10)
  1442.     FileMIDIAperto+1
  1443.     VoceMenuEsci+1
  1444.    Else
  1445.     FileMIDIAperto$(FileMIDIAperto)+Dato$
  1446.    EndIf
  1447.   Until Dato$=""
  1448.   CloseFile 0
  1449.   PopInput
  1450.  EndIf
  1451. End Statement
  1452.  
  1453. ;------------------------------------------------------------------
  1454. ;crea la bitmap per l'immagine di sfondo della finestra principale
  1455. ;creates the bitmap for the background pic of the main window
  1456. ;-------------------------------------------------------------
  1457. Statement CreaLaBitmapPerLImmagineDiSfondo{}
  1458.  
  1459. ;----------------------------------------
  1460. ;crea la bitmap per l'immagine di sfondo
  1461. ;creates the bitmap for the background pic
  1462. ;------------------------------------------
  1463.  BitMap #BitmapImmagineDiSfondo,640,240,4
  1464.  
  1465. End Statement
  1466.  
  1467. ;-------------------------------------------------------------------
  1468. ;carica l'immagine di sfondo della finestra principale nella bitmap
  1469. ;loads the background pic of the main window into the bitmap
  1470. ;------------------------------------------------------------
  1471. Statement CaricaLImmagineDiSfondoNellaBitmap{}
  1472. SHARED ColoriOriginali
  1473.  
  1474. If ColoriOriginali=True
  1475.  ImmagineDiSfondo$="BackPicOC.16Cols"
  1476. Else
  1477.  ImmagineDiSfondo$="BackPic.16Cols"
  1478. EndIf
  1479.  
  1480. ;----------------------------------------------------------------------------
  1481. ;carica l'immagine di sfondo per la finestra principale nella bitmap creata
  1482. ; per questa
  1483. ;loads the main window background image into the bitmap creted for it
  1484. ;---------------------------------------------------------------------
  1485.  LoadBitMap #BitmapImmagineDiSfondo,ImmagineDiSfondo$,#TavolozzaDeiColori
  1486.  
  1487. ;---------------------------------------------------
  1488. ;usa la tavolozza dei colori dell'immagine caricata
  1489. ;use loaded image colours palette
  1490. ;---------------------------------
  1491.  Use Palette #TavolozzaDeiColori
  1492.  
  1493. End Statement
  1494.  
  1495. ;------------------------------------
  1496. ;questa procedura imposta lo schermo
  1497. ;this procedure sets the screen
  1498. ;-------------------------------
  1499. Statement ImpostaLoSchermo{}
  1500. SHARED AltezzaFonte
  1501. SHARED AltezzaSchermo
  1502. SHARED LarghezzaSchermo
  1503. SHARED TracceVisibili
  1504.  
  1505. ;--------------------------------------
  1506. ;imposta la fonte di caratteri globale
  1507. ;sets the global characters font
  1508. ;--------------------------------
  1509.  Use IntuiFont #FonteDiCaratteriTopaz8
  1510.  
  1511. ;------------------------------------
  1512. ;inizializza la tavolozza dei colori
  1513. ;initializes the colours palette
  1514. ;--------------------------------
  1515.  InitPalette #TavolozzaDeiColori,16
  1516.  
  1517. ;-------------------------------
  1518. ;carica i colori per lo schermo
  1519. ;loads colours for screen
  1520. ;-------------------------
  1521. ; For Colore.b=0 To 15
  1522. ;  Read Rosso.b
  1523. ;  Read Verde.b
  1524. ;  Read Blu.b
  1525. ;  PalRGB #TavolozzaDeiColori,Colore,Rosso,Verde,Blu
  1526. ; Next Colore
  1527.  
  1528. ;----------------------------------------------------------------
  1529. ;imposta le penne dello schermo con i migliori colori (ROM 2.0+)
  1530. ;sets screen pens with best colours (ROM 2.0+)
  1531. ;----------------------------------------------
  1532.  ScreenPens 3,2,0,1,3,1,2
  1533.  
  1534. ;------------------------------------------------
  1535. ;apre lo schermo in alta risoluzione a 16 colori
  1536. ;opens high resolution screen with 16 colours
  1537. ;---------------------------------------------
  1538.  Screen #Schermo,4+8,"AmySequencer by Stefano Maria Regattin"
  1539.  
  1540. ;-----------------------------
  1541. ;usa la tavolozza dei colori
  1542. ;use colours palette
  1543. ;--------------------
  1544.  Use Palette #TavolozzaDeiColori
  1545.  
  1546. ;-------------------------------------------------------------------------------
  1547. ;questa variabile contiene l'indirizzo di memoria della struttura dello schermo
  1548. ;this variable retains the screen structure memory address
  1549. ;----------------------------------------------------------
  1550.  IndirizzoSchermo.l=Peek.l(Addr Screen(0))
  1551.  
  1552. ;----------------------------------------------------------
  1553. ;questa variabile contiene la vera larghezza Dello schermo
  1554. ;this variable retains the true screen width
  1555. ;--------------------------------------------
  1556.  LarghezzaSchermo=Peek.w(IndirizzoSchermo+12)
  1557.  
  1558. ;--------------------------------------------------------
  1559. ;questa variabile contiene la vera altezza dello schermo
  1560. ;this variable retains the true screen height
  1561. ;---------------------------------------------
  1562.  AltezzaSchermo=Peek.w(IndirizzoSchermo+14)
  1563.  
  1564. ;-------------------------------------------------------------
  1565. ;questa variabile indica il massimo numero di tracce visibili
  1566. ;this variable states the visible tracks maximum number
  1567. ;-------------------------------------------------------
  1568.  TracceVisibili=(AltezzaSchermo-(AltezzaFonte+3)-8-8-8)/8
  1569.  
  1570. End Statement
  1571.  
  1572. ;-----------------------------------------------------------------------
  1573. ;questa procedura mostra l'immagine di sfondo nella finestra principale
  1574. ;this procedure shows the  background pic into the main window
  1575. ;--------------------------------------------------------------
  1576. Statement MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1577.  
  1578. ;---------------------------------------------------------
  1579. ;copia l'immamgine dalla bitmap nella finestra principale
  1580. ;copies the pic from the bitmap into the main window
  1581. ;----------------------------------------------------
  1582.  BitMaptoWindow #BitmapImmagineDiSfondo,#FinestraPrincipale,0,0,0,0,640,240
  1583.  
  1584. End Statement
  1585.  
  1586. Statement CopiaLoSfondoSottoAlleBattutePerMinuto{}
  1587. SHARED AltezzaInternaFinestraPrincipale
  1588. SHARED LarghezzaInternaFinestraPrincipale
  1589. SHARED XPosSfondoBattutePerMinuto
  1590. SHARED YPosSfondoBattutePerMinuto
  1591.  XPosSfondoBattutePerMinuto=0
  1592.  YPosSfondoBattutePerMinuto=AltezzaInternaFinestraPrincipale-8-8
  1593.  XLunSfondoBattutePerMinuto.w=Len("BPM>000-ticks/50th>000.0")*8
  1594.  YLunSfondoBattutePerMinuto.b=8
  1595.  GetaShape 8,XPosSfondoBattutePerMinuto,YPosSfondoBattutePerMinuto,XLunSfondoBattutePerMinuto,YLunSfondoBattutePerMinuto
  1596. End Statement
  1597.  
  1598. Statement CopiaLoSfondoSottoAlTempo{}
  1599. SHARED AltezzaInternaFinestraPrincipale
  1600. SHARED LarghezzaInternaFinestraPrincipale
  1601. SHARED XPosSfondoTempo
  1602. SHARED YPosSfondoTempo
  1603.  XPosSfondoTempo=LarghezzaInternaFinestraPrincipale-1-(Len("Tempo>00/00")*8-1)
  1604.  YPosSfondoTempo=AltezzaInternaFinestraPrincipale-8-8
  1605.  XLunSfondoTempo.b=Len("Tempo>00/00")*8
  1606.  YLunSfondoTempo.b=8
  1607.  GetaShape 9,XPosSfondoTempo,YPosSfondoTempo,XLunSfondoTempo,YLunSfondoTempo
  1608. End Statement
  1609.  
  1610. ;-------------------------------------------------------------------------------
  1611. ;Questa procedura imposta la finestra principale invisibile e reimposta il menu
  1612. ; principale
  1613. ;this procedure sets the main invisible window and resets the main menu
  1614. ;-----------------------------------------------------------------------
  1615. Statement ImpostaLaFinestraPrincipale{}
  1616. SHARED AltezzaFonte
  1617. SHARED AltezzaInternaFinestraPrincipale
  1618. SHARED AltezzaSchermo
  1619. SHARED BattutePerMinuto
  1620. SHARED FineMotivo
  1621. SHARED FinestraPrincipaleAperta
  1622. SHARED LarghezzaInternaFinestraPrincipale
  1623. SHARED LarghezzaSchermo
  1624. SHARED FileMIDIAperto$()
  1625. SHARED StoriaDeiFileMIDIAperti
  1626. SHARED TicPerCinquantesimoDiSecondo
  1627. SHARED TracceVisibili
  1628. SHARED VoceMenuEsci
  1629. SHARED XLunSlider
  1630. SHARED YLunSlider
  1631.  
  1632. ;-----------------------------------------------
  1633. ;se la finestra era gia' stato aperto la chiude
  1634. ;if window was opened it close it
  1635. ;---------------------------------
  1636.  If FinestraPrincipaleAperta=True
  1637.   BeepScreen #Schermo
  1638.   Free GadgetList #ListaGadgetPrincipale
  1639.   Free MenuList #ListaMenuPrincipale
  1640.   CloseWindow #FinestraPrincipale
  1641.  EndIf
  1642.  
  1643. ;-----------------------------------------------------------------------
  1644. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  1645. ;sets text menu colour to the brightest available
  1646. ;-------------------------------------------------
  1647.  MenuColour 3
  1648.  
  1649. ;-------------------------
  1650. ;imposta il menu' Project
  1651. ;sets Project menu
  1652. ;------------------
  1653.  MenuTitle #ListaMenuPrincipale,0,"SMFile"
  1654.  MenuItem #ListaMenuPrincipale,0,0,0,"New"
  1655.  MenuItem #ListaMenuPrincipale,0,0,1,"Load"
  1656.  MenuItem #ListaMenuPrincipale,0,0,2,"Save"
  1657.  MenuItem #ListaMenuPrincipale,0,0,3,"Save as"
  1658.  If StoriaDeiFileMIDIAperti=True
  1659.   For FileMIDIAperto.b=4 To VoceMenuEsci-1
  1660.    MenuItem 0,0,0,FileMIDIAperto,FileMIDIAperto$(FileMIDIAperto-4)
  1661.   Next FileMIDIAperto
  1662.  EndIf
  1663.  MenuItem 0,0,0,VoceMenuEsci,"Quit"
  1664.  
  1665. ;--------------------------
  1666. ;imposta il menu' Controls
  1667. ;sets Controls menu
  1668. ;------------------
  1669.  MenuTitle #ListaMenuPrincipale,1,"Controls"
  1670.  MenuItem #ListaMenuPrincipale,0,1,0,"Play"
  1671.  MenuItem #ListaMenuPrincipale,0,1,1,"Record"
  1672.  
  1673. ;---------------------------
  1674. ;imposta il menu' Sequences
  1675. ;sets Sequences menu
  1676. ;--------------------
  1677.  MenuTitle #ListaMenuPrincipale,2,"Sequence"
  1678.  MenuItem #ListaMenuPrincipale,0,2,0,"Edit"
  1679.  MenuItem #ListaMenuPrincipale,0,2,1,"Name"
  1680.  
  1681. ;------------------------
  1682. ;imposta il menu' Sounds
  1683. ;sets Sounds menu
  1684. ;-----------------
  1685.  MenuTitle #ListaMenuPrincipale,3,"Sounds"
  1686.  MenuItem #ListaMenuPrincipale,0,3,0,"Edit"
  1687.  
  1688. ;-----------------------
  1689. ;imposta il menu' Prefs
  1690. ;sets Prefs menu
  1691. ;----------------
  1692.  MenuTitle #ListaMenuPrincipale,4,"Prefs"
  1693.  MenuItem #ListaMenuPrincipale,0,4,0,"Set MIDI device"
  1694.  MenuItem #ListaMenuPrincipale,1,4,1,"  Original colours"
  1695.  MenuItem #ListaMenuPrincipale,0,4,2,"Clear loaded MIDI files history"
  1696.  
  1697. ;-------------------------------------------------------------------
  1698. ;apre la finestra principale per ricavarne la larghezza e l'altezza
  1699. ;opens main window to obtain its width and height
  1700. ;-------------------------------------------------
  1701.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  1702.  TipoFinestra.l=#FinestraDiSfondo+#FinestraSenzaBordi+#FinestraAttivata
  1703.  Window #FinestraPrincipale,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1
  1704.  
  1705.  MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1706.  
  1707. ;-------------------------------------------------------------------------
  1708. ;questa variabile conserva la larghezza interna della finestra principale
  1709. ;this variable stores the inner witdh of the main window
  1710. ;--------------------------------------------------------
  1711.  LarghezzaInternaFinestraPrincipale.w=InnerWidth
  1712.  
  1713. ;----------------------------------------------------------------------
  1714. ;questa variabile conserva l'altezza interna della finestra principale
  1715. ;this variable stores the inner height of the main window
  1716. ;---------------------------------------------------------
  1717.  AltezzaInternaFinestraPrincipale.w=InnerHeight
  1718.  
  1719.  CloseWindow #FinestraPrincipale
  1720.  
  1721. ;----------------------------------------------------------------------
  1722. ;imposta la barra di scorrimento che regola la velocita' di esecuzione
  1723. ;sets the slider that tunes the execution velocity
  1724. ;_-------------------------------------------------
  1725.  XLunSlider=LarghezzaInternaFinestraPrincipale
  1726.  YLunSlider=8
  1727.  ImpostaSlider{1,0,AltezzaInternaFinestraPrincipale-8,"HORIZONTAL",0,#ListaGadgetPrincipale}
  1728.  
  1729. ;-----------------------------------------------------------------------
  1730. ;imposta la barra di scorrimento che serve per visualizzare le sequenze
  1731. ;sets the slider that is used to shows the sequences
  1732. ;_---------------------------------------------------
  1733.  XLunSlider=16
  1734.  YLunSlider=TracceVisibili*8
  1735.  ImpostaSlider{2,0,8,"VERTICAL",0,#ListaGadgetPrincipale}
  1736.  
  1737. ;-----------------------------------------------------------------------
  1738. ;imposta la barra di scorrimento che serve per visualizzare le sequenze
  1739. ;sets the slider that is used to shows the sequences
  1740. ;_---------------------------------------------------
  1741.  XLunSlider=LarghezzaInternaFinestraPrincipale-16
  1742.  YLunSlider=4
  1743.  ImpostaSlider{3,16,8+TracceVisibili*8,"HORIZONTAL",0,#ListaGadgetPrincipale}
  1744.  
  1745. ;------------------------------------------------------------------------------
  1746. ;apre la finestra principale solo per il menu' come invisibile e ci attacca la
  1747. ; lista dei gadget principale
  1748. ;opens main window for menu usage only as invisible and it attaches the main
  1749. ; gadget list
  1750. ;-------------
  1751.  Window #FinestraPrincipale,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1,#ListaGadgetPrincipale
  1752.  
  1753. ;-------------------------------
  1754. ;attacca il menu' alla finestra
  1755. ;attaches menu to window
  1756. ;------------------------
  1757.  SetMenu #ListaMenuPrincipale
  1758.  
  1759. ;----------------------------------------------
  1760. ;imposta la fonte di caratteri per la finestra
  1761. ;sets the font for the window
  1762. ;-----------------------------
  1763.  WindowFont #FonteDiCaratteriTopaz8
  1764.  
  1765.  WJam #UnColoreConSfondoTrasparente
  1766.  
  1767. ;-----------------------------------------------------------------
  1768. ;le finestre di richiesta sono assegnate alla finestra principale
  1769. ;the request windows are assigned to main window
  1770. ;------------------------------------------------
  1771.  EZOutput #FinestraPrincipale
  1772.  
  1773.  FinestraPrincipaleAperta=True
  1774.  
  1775. End Statement
  1776.  
  1777. ;---------------------------------------------------------------------------
  1778. ;questa funzione converte il valore dato se oltre 127 in un valore negativo
  1779. ;this function converts the given value if over 127 into the negative
  1780. ; equivalent
  1781. ;------------
  1782. Function.b ConvertiOltreCentoventisetteInNegativo{Dato.w}
  1783.  If Dato>127 Then Dato-256
  1784.  DatoConvertito.b=Dato
  1785.  Function Return DatoConvertito
  1786. End Function
  1787.  
  1788. ;--------------------------------------------------------------------------
  1789. ;questa e' la funzione del panico: Premete il TASTO SINISTRO DEL MOUSE per
  1790. ; rallentare la conversione del file MIDI in caricamento o premete il TASTO
  1791. ; DESTRO DEL MOUSE per annullare la conversione
  1792. ;this is the panic function: press the LEFT MOUSE BUTTON to slow the
  1793. ; conversion of the MIDI file loading or press the RIGHT MOUSE BUTTON to abort
  1794. ; the conversion
  1795. ;----------------
  1796. Function .b Panico{}
  1797.  Select Joyb(0)
  1798.  Case #TastoSinistroPremutoDelTopo
  1799.   Delay_ 50
  1800.  Case #TastoDestroPremutoDelTopo
  1801.   Panico.b=True
  1802.  End Select
  1803.  Function Return Panico
  1804. End Function
  1805.  
  1806. ;--------------------------------------------------------------------------
  1807. ;questa procedura per ora legge solo il nome di un file e o inserisce nel
  1808. ; menu principale; dovrebbe caricare un progetto di AmySequencer
  1809. ;this procedure till now only reads a file name and put it into the main menu
  1810. ; it should load an AmySequencer project
  1811. ;----------------------------------------
  1812. Statement CaricaUnFileMIDI{NomeDelFileMIDI$}
  1813. SHARED EventoMusicale()
  1814. SHARED FileMIDIAperto$()
  1815. SHARED HeaderMarker$
  1816. SHARED Sequenza()
  1817. SHARED StoriaDeiFileMIDIAperti
  1818. SHARED TicPerSessantaquattresimo
  1819. SHARED TrackMarker$
  1820. SHARED VoceMenuEsci
  1821.  MaxLen P$=160
  1822.  MaxLen F$=64
  1823.  If NomeDelFileMIDI$=""
  1824.   NomeDelFileMIDI$=FileRequest$("Load a MIDI file",P$,F$)
  1825.  Else
  1826.   CaricatoDalMenu.b=True
  1827.  EndIf
  1828.  If NomeDelFileMIDI$<>""
  1829.   FileMIDIAperto.b=ReadFile(0,NomeDelFileMIDI$)
  1830.   If FileMIDIAperto=True
  1831.    WJam #DueColoriConSfondoPieno
  1832.    FileInput 0
  1833.    If Inkey$(4)=HeaderMarker$
  1834.     WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1835.     WLocate 0,0:WColour 3,0:Print "Recognized a MIDI file..."
  1836.     Delay_ 50
  1837.     If Cvl(Inkey$(4))=#MarkerLength
  1838.      WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1839.      WLocate 0,0:WColour 3,0:Print "Header length correct..."
  1840.      Delay_ 50
  1841.      If Panico{}=True Then Statement Return
  1842.      TipoDiFileMIDI.b=Cvi(Inkey$(2))
  1843.      WLocate 0,0:WColour 0,0:Print SPACE$(80):WLocate 0,0:WColour 3,0
  1844.      Select TipoDiFileMIDI
  1845.      Case #FormatZero
  1846.       Print "Recognized Standard MIDI File Format 0..."
  1847.       Delay_ 50
  1848.      Case #FormatOne
  1849.       Print "Recognized Standard MIDI File Format 1..."
  1850.       Delay_ 50
  1851.      Case #FormatTwo
  1852.       Print "Recognized Standard MIDI File Format 2..."
  1853.       Delay_50
  1854.      Default
  1855.       IlFileCaricatoNonEUnFileMIDI.b=True
  1856.       Pop Select:Pop If:Pop If:Pop If:Goto FineCicloCaricamento
  1857.      End Select
  1858.      If Panico{}=True Then Statement Return
  1859.      If IlFileCaricatoNonEUnFileMIDI=False
  1860.       Tracce.w=Cvi(Inkey$(2))
  1861.       If Tracce>0
  1862.        WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1863.        WLocate 0,0:WColour 3,0:Print "There "
  1864.        If Tracce=1 Then Print "is one track..." Else Print "are ",Tracce," tracks..."
  1865.        Delay_ 50
  1866.        If Tracce>1 AND TipoDiFileMIDI=0
  1867.         IlFileCaricatoNonEUnFileMIDI=True
  1868.         Pop If:Pop If:Pop If:Pop If:Pop If:Pop If:Goto FineCicloCaricamento
  1869.        EndIf
  1870.        If IlFileCaricatoNonEUnFileMIDI=False
  1871.         TicPerQuarto.w=Cvi(Inkey$(2))
  1872.         If TicPerQuarto<0
  1873.          EZRequest "AmySequencer message","SMPTE timing not supported yet","OK"
  1874.          Statement Return
  1875.         EndIf
  1876.         WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1877.         WLocate 0,0:WColour 3,0:Print "Ticks per quarter note: ",TicPerQuarto
  1878.         If Panico{}=True Then Statement Return
  1879.         TicPerSessantaquattresimo=TicPerQuarto/16
  1880.         For Traccia.w=0 To Tracce-1
  1881.          WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1882.          WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,":"
  1883.          If Panico{}=True Then Statement Return
  1884.          If AddItem(Sequenza())=True
  1885.           Sequenza.l=Traccia+1
  1886.           Sequenza()\Traccia=Traccia+1
  1887.           Sequenza()\Durata=#TicDiBasePerQuarto
  1888.           If Inkey$(4)=TrackMarker$
  1889.            WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1890.            WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": found track header..."
  1891.            If Panico{}=True Then Statement Return
  1892.            LunghezzaTraccia.l=Asc(Inkey$)*256^3+Asc(Inkey$)*256^2+Asc(Inkey$)*256+Asc(Inkey$)
  1893.            If LunghezzaTraccia>0
  1894.             ContatoreByteTraccia.l=0
  1895.             InizioEvento.l=0
  1896.             InizioTraccia.b=True
  1897.             PosizioneEvento.l=0
  1898.             Repeat
  1899.              Repeat
  1900.               DeltaPosizioneEvento.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  1901.               FineDeiDeltaPosizioneEvento.b=DeltaPosizioneEvento BitTst 7
  1902.               WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1903.               WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  1904.               If FineDeiDeltaPosizioneEvento=True
  1905.                Print " another event position value to add search..."
  1906.               Else
  1907.                Print " this was the last event position value to add..."
  1908.               EndIf
  1909.               If Panico{}=True Then Statement Return
  1910.               DeltaPosizioneEvento BitClr 7
  1911.               PosizioneEvento+DeltaPosizioneEvento
  1912.               ContatoreByteTraccia+1
  1913.              Until FineDeiDeltaPosizioneEvento=False
  1914.              WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1915.              WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  1916.              Print " status byte search..."
  1917.              If Panico{}=True Then Statement Return
  1918.              NuovoByteDiStato.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  1919.              ContatoreByteTraccia+1
  1920.              If NuovoByteDiStato<>#MetaEvent
  1921.               If NuovoByteDiStato<0 Then ByteDiStato.b=NuovoByteDiStato
  1922.               If AddItem(EventoMusicale())=True
  1923.                InizioEvento=(PosizioneEvento/TicPerSessantaquattresimo)*#TicDiBasePerSessantaquattresimo
  1924.                If InizioTraccia=True
  1925.                 Sequenza()\Inizio=InizioEvento:InizioEvento=0:InizioTraccia=False
  1926.                EndIf
  1927.                TipoDiEventoMusicale.b=ByteDiStato & #_StatusBits
  1928.                CanaleEvento.b=ByteDiStato & #_ChannelBits+1
  1929.                Select TipoDiEventoMusicale
  1930.                Case #_NoteOn
  1931.                 TipoDiEventoMusicale$="Note"
  1932.                 If NuovoByteDiStato>-1
  1933.                  Evento.b=NuovoByteDiStato
  1934.                 Else
  1935.                  Evento=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  1936.                  ContatoreByteTraccia+1
  1937.                 EndIf
  1938.                 ValoreEvento.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  1939.                 ContatoreByteTraccia+1
  1940.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1941.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  1942.                 Print " note on value found..."
  1943.                 If Panico{}=True Then Statement Return
  1944.                Case #_NoteOff
  1945.                 TipoDiEventoMusicale$="NoteOff"
  1946.                 If NuovoByteDiStato>-1
  1947.                  Evento=NuovoByteDiStato
  1948.                 Else
  1949.                  Evento=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  1950.                  ContatoreByteTraccia+1
  1951.                 EndIf
  1952.                 ValoreEvento=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  1953.                 ContatoreByteTraccia+1
  1954.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1955.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  1956.                 Print " note off value found..."
  1957.                 If Panico{}=True Then Statement Return
  1958.                Case #_ProgramChange
  1959.                 TipoDiEventoMusicale$="Program"
  1960.                 If NuovoByteDiStato>-1
  1961.                  Evento=NuovoByteDiStato
  1962.                 Else
  1963.                  Evento=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  1964.                  ContatoreByteTraccia+1
  1965.                 EndIf
  1966.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1967.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  1968.                 Print " program change value found..."
  1969.                 If Panico{}=True Then Statement Return
  1970.                Case #_ControlChange
  1971.                 TipoDiEventoMusicale$="Control"
  1972.                 If NuovoByteDiStato>-1
  1973.                  Evento=NuovoByteDiStato
  1974.                 Else
  1975.                  Evento=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  1976.                  ContatoreByteTraccia+1
  1977.                 EndIf
  1978.                 ValoreEvento=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  1979.                 ContatoreByteTraccia+1
  1980.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1981.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  1982.                 Print " control change value found..."
  1983.                 If Panico{}=True Then Statement Return
  1984.                Case #_PolyphonicKeyPressure
  1985.                 TipoDiEventoMusicale$="PolyAftertouch"
  1986.                 If NuovoByteDiStato>-1
  1987.                  Evento=NuovoByteDiStato
  1988.                 Else
  1989.                  Evento=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  1990.                  ContatoreByteTraccia+1
  1991.                 EndIf
  1992.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1993.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  1994.                 Print " polyphonic key pressure value found..."
  1995.                 If Panico{}=True Then Statement Return
  1996.                Case #_ChannelKeyPressure
  1997.                 TipoDiEventoMusicale$="MonoAftertouch"
  1998.                 If NuovoByteDiStato>-1
  1999.                  Evento=NuovoByteDiStato
  2000.                 Else
  2001.                  Evento=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2002.                  ContatoreByteTraccia+1
  2003.                 EndIf
  2004.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2005.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2006.                 Print " channel key pressure value found..."
  2007.                 If Panico{}=True Then Statement Return
  2008.                Case #_PitchBend
  2009.                 TipoDiEventoMusicale$="PitchBend"
  2010.                 If NuovoByteDiStato>-1
  2011.                  ValoreEvento=NuovoByteDiStato
  2012.                 Else
  2013.                  ValoreEvento=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2014.                  ContatoreByteTraccia+1
  2015.                 EndIf
  2016.                 Evento=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2017.                 ContatoreByteTraccia+1
  2018.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2019.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2020.                 Print " pitchbend value found..."
  2021.                 If Panico{}=True Then Statement Return
  2022.                Default
  2023.                 TipoDiEventoMusicale$=""
  2024.                End Select
  2025.                If TipoDiEventoMusicale$<>""
  2026.                 If TipoDiEventoMusicale$<>"NoteOff"
  2027.                  EventoMusicale()\Tipo=TipoDiEventoMusicale$
  2028.                  EventoMusicale()\Evento=Evento
  2029.                  EventoMusicale()\Inizio=InizioEvento
  2030.                  EventoMusicale()\Canale=CanaleEvento
  2031.                  EventoMusicale()\Sequenza=Sequenza
  2032.                  EventoMusicale()\Durata=2
  2033.                  If TipoDiEventoMusicale$="Note"
  2034.                   EventoMusicale()\Valore=ValoreEvento
  2035.                   EventoMusicale()\Stato | #EventoMusicaleEseguito
  2036.                  EndIf
  2037.                  If TipoDiEventoMusicale$="Control" Then EventoMusicale()\Valore=ValoreEvento
  2038.                  If TipoDiEventoMusicale$="PitchBend" Then EventoMusicale()\Valore=ValoreEvento
  2039.                  Sequenza()\EventiMusicali+1
  2040.                 Else
  2041.                  PushItem EventoMusicale()
  2042.                  ResetList EventoMusicale()
  2043.                  While NextItem(EventoMusicale())=True
  2044.                   If EventoMusicale()\Stato & #EventoMusicaleTerminato<>#EventoMusicaleTerminato
  2045.                    If EventoMusicale()\Stato & #EventoMusicaleEseguito=#EventoMusicaleEseguito
  2046.                     If EventoMusicale()\Tipo="Note" AND EventoMusicale()\Evento=Evento
  2047.                      EventoMusicale()\Durata=(PosizioneEvento/TicPerSessantaquattresimo)*#TicDiBasePerSessantaquattresimo
  2048.                      EventoMusicale()\Durata-EventoMusicale()\Inizio+1
  2049.                      EventoMusicale()\Stato & %11110111
  2050.                      EventoMusicale()\Stato | #EventoMusicaleTerminato
  2051.                      Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileCaricamento
  2052.                     EndIf
  2053.                    EndIf
  2054.                   Else
  2055.                    EventoMusicale()\Stato & %11101111
  2056.                   EndIf
  2057.                  Wend
  2058. FineCicloWhileCaricamento
  2059.                  PopItem EventoMusicale()
  2060.                 EndIf
  2061.                 Sequenza()\Durata=Max(Sequenza()\Durata,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  2062.                EndIf
  2063.               Else
  2064.                EZRequest "AmySequencer message","You have used all the available events","OK"
  2065.                Statement Return
  2066.               EndIf
  2067.              Else
  2068.               TipoDiMetaEvento.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2069.               ContatoreByteTraccia+1
  2070.               Select TipoDiMetaEvento
  2071.               Case #SequenceNumber
  2072.  
  2073. ;---------------------------------------------------------------------------
  2074. ;questa variabile e' fittizia, il suo valore e' noto ed  e' 2, e' usata per
  2075. ; saltare un dato
  2076. ;this is a dummy var, its value is known and is 2, is used to skip a datum
  2077. ;--------------------------------------------------------------------------
  2078.                LunghezzaMetaEvento.l=Asc(Inkey$)
  2079.  
  2080.                ContatoreByteTraccia+1
  2081.                Sequenza=Asc(Inkey$)*256+Asc(Inkey$)+1
  2082.                ContatoreByteTraccia+2
  2083.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2084.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2085.                Print " sequence number: ",Sequenza
  2086.                If Panico{}=True Then Statement Return
  2087.               Case #SequenceName
  2088.                LunghezzaNome.l=0
  2089.                Repeat
  2090.                 DeltaLunghezzaNome.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2091.                 FineDeiDeltaLunghezzaNome.b=DeltaLunghezzaNome BitTst 7
  2092.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2093.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2094.                 If FineDeiDeltaLunghezzaNome=True
  2095.                  Print " another sequence name length value to add search..."
  2096.                 Else
  2097.                  Print " this was the last sequence name length value to add..."
  2098.                 EndIf
  2099.                 If Panico{}=True Then Statement Return
  2100.                 DeltaLunghezzaNome BitClr 7
  2101.                 LunghezzaNome+DeltaLunghezzaNome
  2102.                 ContatoreByteTraccia+1
  2103.                Until FineDeiDeltaLunghezzaNome=False
  2104.                NomeSequenza$=StripTrail$(Inkey$(LunghezzaNome),0)
  2105.                ContatoreByteTraccia+LunghezzaNome
  2106.                Sequenza()\Nome=NomeSequenza$
  2107.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2108.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2109.                Print " sequence name: ",Left$(NomeSequenza$,80-WCursX/8)
  2110.                If Panico{}=True Then Statement Return
  2111.               Default
  2112.                LunghezzaMetaEvento=0
  2113.                Repeat
  2114.                 DeltaLunghezzaMetaEvento.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2115.                 FineDeiDeltaLunghezzaMetaEvento.b=DeltaLunghezzaMetaEvento BitTst 7
  2116.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2117.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2118.                 If FineDeiDeltaLunghezzaMetaEvento=True
  2119.                  Print " another meta event length value to add search..."
  2120.                 Else
  2121.                  Print " this was the last meta event length value to add..."
  2122.                 EndIf
  2123.                 If Panico{}=True Then Statement Return
  2124.                 DeltaLunghezzaMetaEvento BitClr 7
  2125.                 LunghezzaMetaEvento+DeltaLunghezzaMetaEvento
  2126.                 ContatoreByteTraccia+1
  2127.                Until FineDeiDeltaLunghezzaMetaEvento=False
  2128.                If LunghezzaMetaEvento>0
  2129.                 ValoreMetaEvento$=Inkey$(LunghezzaMetaEvento)
  2130.                 ContatoreByteTraccia+LunghezzaMetaEvento
  2131.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2132.                 WLocate 0,0:WColour 3,0:Print Left$(ValoreMetaEvento$,80)
  2133.                EndIf
  2134.                If Panico{}=True Then Statement Return
  2135.               End Select
  2136.              EndIf
  2137.             Until NuovoByteDiStato=#MetaEvent AND TipoDiMetaEvento=#EndOfTrackChunk
  2138.             WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2139.             WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": ",ContatoreByteTraccia," of ",LunghezzaTraccia,"..."
  2140.             If Panico{}=True Then Statement Return
  2141.             WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2142.             WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": "
  2143.             If ContatoreByteTraccia=LunghezzaTraccia
  2144.              Print "bytes match! :-)"
  2145.             Else
  2146.              Print "bytes don't match! :-("
  2147.             EndIf
  2148.             Delay_ 50
  2149.            Else
  2150.             WLocate 0,0:WColour 3,0:Print "No datum found..."
  2151.            End If
  2152.           Else
  2153.            IlFileCaricatoNonEUnFileMIDI=True
  2154.            Pop If:Pop If:Pop For:Pop If:Pop If:Pop If:Pop If:Pop If:Pop If:Goto FineCicloCaricamento
  2155.           EndIf
  2156.          Else
  2157.           EZRequest "AmySequencer message","You have used all the available sequences","OK"
  2158.           Pop If:Pop For:Pop If:Pop If:Pop If:Pop For:Pop If:Pop If:Goto FineCicloCaricamento
  2159.          EndIf
  2160.         Next Traccia
  2161.        EndIf
  2162.       EndIf
  2163.      EndIf
  2164.     Else
  2165.      IlFileCaricatoNonEUnFileMIDI=True
  2166.      Pop If:Pop If:Pop If:Goto FineCicloCaricamento
  2167.     EndIf
  2168.    Else
  2169.     IlFileCaricatoNonEUnFileMIDI=True
  2170.     Pop If:Pop If:Goto FineCicloCaricamento
  2171.    EndIf
  2172.    WJam #UnColoreConSfondoTrasparente
  2173. FineCicloCaricamento
  2174.    CloseFile 0
  2175.    PopInput
  2176.    If IlFileCaricatoNonEUnFileMIDI=True
  2177.     EZRequest "AmySequencer message","This is not a MIDI file","OK"
  2178.    Else
  2179.     If CaricatoDalMenu=False
  2180.      For FileMIDIAperto.b=3 To 0 Step -1
  2181.       FileMIDIAperto$(FileMIDIAperto+1)=FileMIDIAperto$(FileMIDIAperto)
  2182.      Next FileMIDIAperto
  2183.      FileMIDIAperto$(0)=NomeDelFileMIDI$
  2184.      StoriaDeiFileMIDIAperti=WriteFile(0,"LoadedMIDIFilesHistory")
  2185.      If StoriaDeiFileMIDIAperti=True
  2186.       FileOutput 0
  2187.       For FileMIDIAperto=0 To 4
  2188.        If FileMIDIAperto$(FileMIDIAperto)<>""
  2189.         NPrint FileMIDIAperto$(FileMIDIAperto)
  2190.        EndIf
  2191.       Next FileMIDIAperto
  2192.       CloseFile 0
  2193.       PopOutput
  2194.       VoceMenuEsci+1
  2195.      EndIf
  2196.     EndIf
  2197.    EndIf
  2198.   EndIf
  2199.  EndIf
  2200. End Statement
  2201.  
  2202. ;-----------------------------------------------------------
  2203. ;questa procedura imposta i suoni da usare con il programma
  2204. ;this procedure sets sounds to use with the program
  2205. ;---------------------------------------------------
  2206. Statement EditoreSuoni{}
  2207. SHARED AltezzaFonte
  2208. SHARED AltezzaSchermo
  2209. SHARED CanaliAttivati
  2210. SHARED LarghezzaSchermo
  2211. SHARED PercorsoSuoni$
  2212. SHARED Suono()
  2213. SHARED XLunSlider
  2214. SHARED YLunSlider
  2215.  
  2216. ;-----------------------------------------------------------------------
  2217. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  2218. ;sets text menu colour to the brightest available
  2219. ;-------------------------------------------------
  2220.  MenuColour 3
  2221.  
  2222.  MenuTitle #ListaMenuEditoreSuoni,0,"Sounds"
  2223.  MenuItem #ListaMenuEditoreSuoni,0,0,0,"Load"
  2224.  MenuItem #ListaMenuEditoreSuoni,0,0,1,"Discard"
  2225.  
  2226.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  2227.  TipoFinestra.l=#GadgetChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  2228.  Window #FinestraEditoreSuoni,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"Sounds Editor",-1,-1
  2229.  LarghezzaInternaFinestraEditoreSuoni.w=InnerWidth
  2230.  AltezzaInternaFinestraEditoreSuoni.w=InnerHeight
  2231.  CloseWindow #FinestraEditoreSuoni
  2232.  
  2233. ;-------------------------------------------------------------------------------
  2234. ;imposta la barra di scorrimento che serve per visualizzare i suoni disponibili
  2235. ;sets the slider that is used to show the available sounds
  2236. ;----------------------------------------------------------
  2237.  XLunSlider=16
  2238.  YLunSlider=AltezzaInternaFinestraEditoreSuoni
  2239.  ImpostaSlider{#SliderEditoreSuoni,LarghezzaInternaFinestraEditoreSuoni-16,0,"VERTICAL",0,#ListaGadgetEditoreSuoni}
  2240.  
  2241.  Window #FinestraEditoreSuoni,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"Sounds Editor",-1,-1,#ListaGadgetEditoreSuoni
  2242.  
  2243. ;-------------------------------
  2244. ;attacca il menu' alla finestra
  2245. ;attaches menu to window
  2246. ;------------------------
  2247.  SetMenu #ListaMenuEditoreSuoni
  2248.  
  2249. ;----------------------------------------------
  2250. ;imposta la fonte di caratteri per la finestra
  2251. ;sets the font for the window
  2252. ;-----------------------------
  2253.  WindowFont #FonteDiCaratteriTopaz8
  2254.  
  2255.  WJam #DueColoriConSfondoPieno
  2256.  
  2257. ;-----------------------------------
  2258. ;sounds window's displacement start
  2259. ;-----------------------------------
  2260.  InizioSuoni.b=0
  2261.  
  2262. ;------------------------
  2263. ;maximum strings length
  2264. ;------------------------
  2265.  LunghezzaMassimaStringhe.b=(LarghezzaInternaFinestraEditoreSuoni-16)/8
  2266.  
  2267. ;---------------------------------
  2268. ;stated by mouse new sound number
  2269. ;---------------------------------
  2270.  NuovoSuonoIndicatoDalTopo.b=-1
  2271.  
  2272. ;-----------------------------
  2273. ;stated by mouse sound number
  2274. ;-----------------------------
  2275.  SuonoIndicatoDalTopo.b=-1
  2276.  
  2277. ;-------------------------------------------------------------------------
  2278. ;imposta la barra di scorrimento della velocita' di esecuzione delle note
  2279. ;sets the notes execution velocity slider
  2280. ;-----------------------------------------
  2281.  MostraSlider{#SliderEditoreSuoni,InizioSuoni,2,"VERTICAL",#ListaGadgetEditoreSuoni,#FinestraEditoreSuoni}
  2282.  
  2283.  Repeat
  2284.   If SecondoClicDelTopo.b=False
  2285.  
  2286.    WCls
  2287.  
  2288.    WLocate 0,0
  2289.  
  2290. ;----------------------
  2291. ;loaded sounds counter
  2292. ;----------------------
  2293.    SuoniCaricati=0
  2294.  
  2295.    For Suono.b=0 To 30
  2296.     AssegnamentoSuono$=Suono(InizioSuoni+Suono)\Nome
  2297.     If AssegnamentoSuono$<>""
  2298.      CanaleSuono.b=Suono(InizioSuoni+Suono)\Canale
  2299.      If CanaleSuono>0
  2300.       WColour CanaleSuono-1,16-CanaleSuono:Format "00":CanaleSuono$=" channel "+Str$(CanaleSuono):Format""
  2301.      Else
  2302.       WColour 1,0:CanaleSuono$=" no channel"
  2303.      EndIf
  2304.      AssegnamentoSuono$+CanaleSuono$
  2305.      AssegnamentoSuono$=Right$(AssegnamentoSuono$,LunghezzaMassimaStringhe)
  2306.      AssegnamentoSuono$+SPACE$(LunghezzaMassimaStringhe-Len(AssegnamentoSuono$))
  2307.      NPrint AssegnamentoSuono$
  2308.      If SuonoIndicatoDalTopo>-1 AND SuonoIndicatoDalTopo=InizioSuoni+Suono
  2309.       If CanaleSuono>0
  2310.        Wline 0,SuonoIndicatoDalTopo*8,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8+7,CanaleSuono-1
  2311.        Wline 0,SuonoIndicatoDalTopo*8+7,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8,CanaleSuono-1
  2312.       Else
  2313.        Wline 0,SuonoIndicatoDalTopo*8,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8+7,1
  2314.        Wline 0,SuonoIndicatoDalTopo*8+7,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8,1
  2315.       EndIf
  2316.      EndIf
  2317.      SuoniCaricati+1
  2318.     EndIf
  2319.    Next Suono
  2320.    SecondoClicDelTopo=True
  2321.   EndIf
  2322.  
  2323.   If SuoniCaricati=32
  2324.    Enable #ListaGadgetEditoreSuoni,#SliderEditoreSuoni
  2325.   Else
  2326.    Disable #ListaGadgetEditoreSuoni,#SliderEditoreSuoni
  2327.   EndIf
  2328.   Redraw #FinestraEditoreSuoni
  2329.  
  2330.   EventoFinestraEditoreSuoni.l=WaitEvent
  2331.  
  2332.   Select EventoFinestraEditoreSuoni
  2333.   Case #HaiPremutoUnTastoDelTopo
  2334.    TastoDelTopoCliccato.b=MButtons:YTopo=WMouseY
  2335.    Select TastoDelTopoCliccato
  2336.    Case #TastoSinistroPremutoDelTopo
  2337.     NuovoSuonoIndicatoDalTopo=YTopo/8+InizioSuoni
  2338.     If NuovoSuonoIndicatoDalTopo=SuonoIndicatoDalTopo
  2339.      If SuoniCaricati>0 AND SuonoIndicatoDalTopo<SuoniCaricati
  2340.       CanaleSuonoIndicatoDalTopo.b=Suono(SuonoIndicatoDalTopo)\Canale
  2341.       If CanaliAttivati=%1111111111111111
  2342.        Suono(SuonoIndicatoDalTopo)\Canale=0
  2343.        CanaliAttivati BitClr (CanaleSuonoIndicatoDalTopo-1)
  2344.       Else
  2345.        If CanaleSuonoIndicatoDalTopo>0
  2346.         If CanaleSuonoIndicatoDalTopo=16
  2347.          Suono(SuonoIndicatoDalTopo)\Canale=0
  2348.          CanaliAttivati BitClr 15
  2349.          CanaleSuono=0
  2350.         Else
  2351.          For CanaleSuono=1 To 15
  2352.           CanaleLibero.b=CanaleSuono+CanaleSuonoIndicatoDalTopo
  2353.           While CanaleLibero>16
  2354.            CanaleLibero-16
  2355.           Wend
  2356.           If CanaliAttivati BitTst (CanaleLibero-1)=False
  2357.            Suono(SuonoIndicatoDalTopo)\Canale=CanaleLibero
  2358.            CanaliAttivati BitClr (CanaleSuonoIndicatoDalTopo-1)
  2359.            CanaliAttivati BitSet (CanaleLibero-1)
  2360.            Pop If:Pop For:Pop If:Pop If:Pop If:Goto FineCicloAssegnamentoCanali
  2361.           EndIf
  2362.          Next CanaleSuono
  2363.         EndIf
  2364.        Else
  2365.         For CanaleSuono=0 To 15
  2366.          If CanaliAttivati BitTst CanaleSuono=False
  2367.           Suono(SuonoIndicatoDalTopo)\Canale=CanaleSuono+1
  2368.           CanaliAttivati BitSet CanaleSuono
  2369.           Pop If:Pop For:Pop If:Pop If:Goto FineCicloAssegnamentoCanali
  2370.          EndIf
  2371.         Next CanaleSuono
  2372.        EndIf
  2373.       EndIf
  2374. FineCicloAssegnamentoCanali
  2375.       If CanaleSuono=16 Then EZRequest "AmySequencer Message","No free channel available","OK"
  2376.      EndIf
  2377.     Else
  2378.      SuonoIndicatoDalTopo=NuovoSuonoIndicatoDalTopo
  2379.     EndIf
  2380.     SecondoClicDelTopo=False
  2381.    Case #TastoSinistroDelTopoRilasciato
  2382.     SecondoClicDelTopo=True
  2383.    End Select
  2384. ;  Case #HaiPremutoUnGadget
  2385. ;   InizioSuoni=ValoreSlider{#SliderEditoreSuoni,2,AltezzaInternaFinestraEditoreSuoni,"VERTICAL",#ListaGadgetEditoreSuoni}
  2386. ;   SecondoClicDelTopo=False
  2387.   Case #HaiRilasciatoUnGadget
  2388.    InizioSuoni=ValoreSlider{#SliderEditoreSuoni,2,AltezzaInternaFinestraEditoreSuoni,"VERTICAL",#ListaGadgetEditoreSuoni}
  2389.    SecondoClicDelTopo=False
  2390.   Case #HaiAttivatoIlMenu
  2391.    If MenuHit=0 AND ItemHit=0
  2392.     If SuoniCaricati<32
  2393.      MaxLen PercorsoSuoni$=160
  2394.      MaxLen NomeSuono$=64
  2395.      NomeSuono$=FileRequest$("Load a sound...",PercorsoSuoni$,NomeSuono$)
  2396.      If NomeSuono$<>""
  2397.       StessoSuono.b=False
  2398.       If SuoniCaricati>0
  2399.        For SuonoPrecedente=0 To SuoniCaricati-1
  2400.         If NomeSuono$=Suono(SuonoPrecedente)\Nome Then StessoSuono=True
  2401.        Next SuonoPrecedente
  2402.       EndIf
  2403.       If StessoSuono=False
  2404.        Suono=SuoniCaricati
  2405.        LoadSound Suono,NomeSuono$
  2406.        Suono(Suono)\Nome=NomeSuono$
  2407.        Sound Suono,3
  2408.       EndIf
  2409.      EndIf
  2410.     Else
  2411.      EZRequest "AmySequencer message","You cannot load more sounds","OK"
  2412.     EndIf
  2413.    EndIf
  2414.    If MenuHit=0 AND ItemHit=1
  2415.     If SuoniCaricati>0
  2416.      If SuonoIndicatoDalTopo<SuoniCaricati AND SuonoIndicatoDalTopo>-1
  2417.       Suono=SuonoIndicatoDalTopo
  2418.       Free Sound Suono
  2419.       Suono(Suono)\Nome=""
  2420.       While Suono+1<SuoniCaricati
  2421.        Suono(Suono)\Nome=Suono(Suono+1)\Nome
  2422.        Suono(Suono)\Canale=Suono(Suono+1)\Canale
  2423.        Suono+1
  2424.       Wend
  2425.       Suono(Suono)\Nome=""
  2426.       CanaliAttivati BitClr (Suono(Suono)\Canale-1)
  2427.       Suono(Suono)\Canale=0
  2428.       SuonoIndicatoDalTopo=-1
  2429.      Else
  2430.       EZRequest "AmySequencer message","You must select a sound first","OK"
  2431.      EndIf
  2432.     Else
  2433.      EZRequest "AmySequencer message","You must load a sound first","OK"
  2434.     EndIf
  2435.    EndIf
  2436.    SecondoClicDelTopo=False
  2437.   Case #HaiChiusoLaFinestra
  2438. ;   SuoniAssegnatiAlloStessoCanale.b=False
  2439. ;   For SuonoUno.b=0 To 31
  2440. ;    For SuonoDue.b=0 To 31
  2441. ;     If SuonoUno<>SuonoDue
  2442. ;      If Suono(SuonoUno)\Canale>0 AND Suono(SuonoUno)\Canale=Suono(SuonoDue)\Canale
  2443. ;       SuoniAssegnatiAlloStessoCanale=True
  2444. ;      EndIf
  2445. ;     EndIf
  2446. ;    Next SuonoDue
  2447. ;   Next SuonoUno
  2448. ;   If SuoniAssegnatiAlloStessoCanale=True
  2449. ;    Messaggio$="You have two or more sounds|assigned to the same channel;|please adjust all better!"
  2450. ;    EZRequest "AmySequencer message",Messaggio$,"OK"
  2451. ;    SecondoClicDelTopo=False
  2452. ;   Else
  2453.    EsciDallEditoreSuoni.b=True
  2454. ;   EndIf
  2455.   Case #HaiPremutoUnTasto
  2456.    TastoPremuto$=LCase$(Inkey$)
  2457.    Select TastoPremuto$
  2458.    Case TastoEsc$
  2459.     EsciDallEditoreSuoni=True
  2460.    Case TastoCursoreSu$
  2461.    Case TastoCursoreGiu$
  2462.    End Select
  2463.    SecondoClicDelTopo=False
  2464.   End Select
  2465.  Until EsciDallEditoreSuoni=True
  2466.  CloseWindow #FinestraEditoreSuoni
  2467.  Use Window #FinestraPrincipale
  2468.  WJam #UnColoreConSfondoTrasparente
  2469. End Statement
  2470.  
  2471. ;-----------------------------------------------------
  2472. ;questa procedura cancella a video un evento musicale
  2473. ;this procedure clears on screen a musical event
  2474. ;------------------------------------------------
  2475. Statement CancellaUnEventoMusicale{TipoDiEventoMusicale$,Evento.w,InizioEvento.l,DurataEvento.l,StatoEvento.b}
  2476. SHARED AltezzaInternaFinestraEditoreSequenza
  2477. SHARED AreaVisibileDeiValori
  2478. SHARED LarghezzaInternaFinestraEditoreSequenza
  2479. SHARED ScalaEventiMusicali
  2480. SHARED TipoDiNota()
  2481. SHARED XInizioAreaVisibile
  2482. SHARED YInizioAreaVisibile
  2483.  SelezioneEventoMusicale.b=StatoEvento & #EventoMusicaleSelezionato
  2484.  EventoMusicaleTagliato.b=StatoEvento & #EventoMusicaleTagliato
  2485.  EventoMusicaleCopiato.b=StatoEvento & #EventoMusicaleCopiato
  2486.  Select TipoDiEventoMusicale$
  2487.  Case "Note"
  2488.   NotaVisualizzata.w=(127-Evento-YInizioAreaVisibile)*8
  2489.   If NotaVisualizzata>=0 AND NotaVisualizzata+7<=AltezzaInternaFinestraEditoreSequenza-8-8
  2490.    InizioNota.l=InizioEvento:FineNota.l=InizioNota+DurataEvento-1
  2491.    I.w=16+(InizioNota-XInizioAreaVisibile)/ScalaEventiMusicali
  2492.    F.w=16+(FineNota-XInizioAreaVisibile)/ScalaEventiMusicali
  2493.    If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  2494.     InizioNotaVisibile.b=True
  2495.    Else
  2496.     InizioNotaVisibile=False
  2497.    EndIf
  2498.    If F>=16 AND F<LarghezzaInternaFinestraEditoreSequenza
  2499.     FineNotaVisibile.b=True
  2500.    Else
  2501.     FineNotaVisibile=False
  2502.    EndIf
  2503.    If I<16 AND F>LarghezzaInternaFinestraEditoreSequenza
  2504.     NotaVisibile.b=True
  2505.    Else
  2506.     If InizioNotaVisibile=True OR FineNotaVisibile=True
  2507.      NotaVisibile=True
  2508.     Else
  2509.      NotaVisibile=False
  2510.     EndIf
  2511.    EndIf
  2512.    If NotaVisibile=True
  2513.     X0Nota=Min(Max(I,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2514.     Y0Nota=Min(Max(NotaVisualizzata,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2515.     X1Nota=Min(Max(F,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2516.     Y1Nota=Min(Max(NotaVisualizzata+7,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2517.     If TipoDiNota(Nota)\Diesis=True
  2518.      WBox X0Nota,Y0Nota,X1Nota,Y1Nota,0
  2519.     Else
  2520.      WBox X0Nota,Y0Nota,X1Nota,Y1Nota,3
  2521.     EndIf
  2522.    EndIf
  2523.   EndIf
  2524.  Case "Program"
  2525.   FineProgramma.l=InizioEvento+Len("Program000")*8-1
  2526.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineProgramma+Len("X")*8
  2527.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineProgramma+Len("Cu")*8
  2528.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineProgramma+Len("Co")*8
  2529.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2530.   F=16+(FineProgramma-XInizioAreaVisibile)/ScalaEventiMusicali
  2531.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2532.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2533.    Programma.b=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2534.    For Linea.b=0 To 7
  2535.     Y.w=Programma+Linea
  2536.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2537.      Wline I,Y,FineProgramma,Y,0
  2538.     Else
  2539.      Wline I,Y,FineProgramma,Y,3
  2540.     EndIf
  2541.    Next Linea
  2542.   EndIf
  2543.  Case "Control"
  2544.   FineControllo.l=InizioEvento+Len("Control000")*8-1
  2545.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineControllo+Len("X")*8
  2546.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineControllo+Len("Cu")*8
  2547.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineControllo+Len("Co")*8
  2548.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2549.   F=16+(FineControllo-XInizioAreaVisibile)/ScalaEventiMusicali
  2550.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2551.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2552.    Controllo.w=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2553.    For Linea.b=0 To 7
  2554.     Y=Controllo+Linea
  2555.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2556.      Wline I,Y,FineControllo,Y,0
  2557.     Else
  2558.      Wline I,Y,FineControllo,Y,3
  2559.     EndIf
  2560.    Next Linea
  2561.   EndIf
  2562.  Case "PolyAftertouch"
  2563.   FinePressioneMultipla.l=InizioEvento+Len("Poly000")*8-1
  2564.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneMultipla+Len("X")*8
  2565.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneMultipla+Len("Cu")*8
  2566.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneMultipla+Len("Co")*8
  2567.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2568.   F=16+(FinePressioneMultipla-XInizioAreaVisibile)/ScalaEventiMusicali
  2569.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2570.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2571.    PressioneMultipla.w=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2572.    For Linea.b=0 To 7
  2573.     Y=PressioneMultipla+Linea
  2574.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2575.      Wline I,Y,FinePressioneMultipla,Y,0
  2576.     Else
  2577.      Wline I,Y,FinePressioneMultipla,Y,3
  2578.     EndIf
  2579.    Next Linea
  2580.   EndIf
  2581.  Case "MonoAftertouch"
  2582.   FinePressioneSingola.l=InizioEvento+Len("Mono000")*8-1
  2583.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneSingola+Len("X")*8
  2584.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneSingola+Len("Cu")*8
  2585.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneSingola+Len("Co")*8
  2586.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2587.   F=16+(FinePressioneSingola-XInizioAreaVisibile)/ScalaEventiMusicali
  2588.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2589.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2590.    PressioneSingola.w=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2591.    For Linea.b=0 To 7
  2592.     Y=PressioneSingola+Linea
  2593.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2594.      Wline I,Y,FinePressioneSingola,Y,0
  2595.     Else
  2596.      Wline I,Y,FinePressioneSingola,Y,3
  2597.     EndIf
  2598.    Next Linea
  2599.   EndIf
  2600.  Case "PitchBend"
  2601.   FineCurvaDiPicco.l=InizioEvento+Len("Bend+0000")*8-1
  2602.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineCurvaDiPicco+Len("X")*8
  2603.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineCurvaDiPicco+Len("Cu")*8
  2604.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineCurvaDiPicco+Len("Co")*8
  2605.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2606.   F=16+(FineCurvaDiPicco-XInizioAreaVisibile)/ScalaEventiMusicali
  2607.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2608.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2609.    CurvaDiPicco.w=AreaVisibileDeiValori*Max((127-Evento/128+1),0)/127
  2610.    For Linea.b=0 To 7
  2611.     Y=CurvaDiPicco+Linea
  2612.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2613.      Wline I,Y,FineCurvaDiPicco,Y,0
  2614.     Else
  2615.      Wline I,Y,FineCurvaDiPicco,Y,3
  2616.     EndIf
  2617.    Next Linea
  2618.   EndIf
  2619.  Case "Tempo"
  2620.   FineTempo.l=InizioEvento+Len("Tempo00/00")*8-1
  2621.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineTempo+Len("X")*8
  2622.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineTempo+Len("Cu")*8
  2623.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineTempo+Len("Co")*8
  2624.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2625.   F=16+(FineTempo-XInizioAreaVisibile)/ScalaEventiMusicali
  2626.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2627.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2628.    Tempo.w=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2629.    For Linea.b=0 To 7
  2630.     Y=Tempo+Linea
  2631.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2632.      Wline I,Y,FineTempo,Y,0
  2633.     Else
  2634.      Wline I,Y,FineTempo,Y,3
  2635.     EndIf
  2636.    Next Linea
  2637.   EndIf
  2638.  Case "BPM"
  2639.   FineBattutePerMinuto.l=InizioEvento+Len("BPM000")*8-1
  2640.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineBattutePerMinuto+Len("X")*8
  2641.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineBattutePerMinuto+Len("Cu")*8
  2642.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineBattutePerMinuto+Len("Co")*8
  2643.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2644.   F=16+(FineBattutePerMinuto-XInizioAreaVisibile)/ScalaEventiMusicali
  2645.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2646.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2647.    BattutePerMinuto.w=AreaVisibileDeiValori*Max(97-Evento/3+1,0)/97
  2648.    For Linea.b=0 To 7
  2649.     Y=BattutePerMinuto+Linea
  2650.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2651.      Wline I,Y,FineBattutePerMinuto,Y,0
  2652.     Else
  2653.      Wline I,Y,FineBattutePerMinuto,Y,3
  2654.     EndIf
  2655.    Next Linea
  2656.   EndIf
  2657.  End Select
  2658. End Statement
  2659.  
  2660. ;--------------------------------------------
  2661. ;questa procedura disegna un evento musicale
  2662. ;this procedure draws a musical events
  2663. ;--------------------------------------
  2664. Statement DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento.w,InizioEvento.l,DurataEvento.l,CanaleEvento.b,StatoEvento.b}
  2665. SHARED AltezzaInternaFinestraEditoreSequenza
  2666. SHARED AreaVisibileDeiValori
  2667. SHARED LarghezzaInternaFinestraEditoreSequenza
  2668. SHARED ScalaEventiMusicali
  2669. SHARED XInizioAreaVisibile
  2670. SHARED YInizioAreaVisibile
  2671.  SelezioneEventoMusicale.b=StatoEvento & #EventoMusicaleSelezionato
  2672.  EventoMusicaleTagliato.b=StatoEvento & #EventoMusicaleTagliato
  2673.  EventoMusicaleCopiato.b=StatoEvento & #EventoMusicaleCopiato
  2674.  EventoMusicaleEseguito.b=StatoEvento & #EventoMusicaleEseguito
  2675.  Select TipoDiEventoMusicale$
  2676.  Case "Note"
  2677.   NotaVisualizzata.w=(127-Evento-YInizioAreaVisibile)*8
  2678.   If NotaVisualizzata>=0 AND NotaVisualizzata+7<=AltezzaInternaFinestraEditoreSequenza-8-8
  2679.    FineNota.l=InizioEvento+DurataEvento-1
  2680.    I.w=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2681.    F.w=16+(FineNota-XInizioAreaVisibile)/ScalaEventiMusicali
  2682.    If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  2683.     InizioNotaVisibile.b=True
  2684.    Else
  2685.     InizioNotaVisibile=False
  2686.    EndIf
  2687.    If F>=16 AND F<LarghezzaInternaFinestraEditoreSequenza
  2688.     FineNotaVisibile.b=True
  2689.    Else
  2690.     FineNotaVisibile=False
  2691.    EndIf
  2692.    If I<16 AND F>LarghezzaInternaFinestraEditoreSequenza
  2693.     NotaVisibile.b=True
  2694.    Else
  2695.     If InizioNotaVisibile=True OR FineNotaVisibile=True
  2696.      NotaVisibile=True
  2697.     Else
  2698.      NotaVisibile=False
  2699.     EndIf
  2700.    EndIf
  2701.    If NotaVisibile=True
  2702.     X0Nota=Min(Max(I,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2703.     Y0Nota=Min(Max(NotaVisualizzata,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2704.     X1Nota=Min(Max(F,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2705.     Y1Nota=Min(Max(NotaVisualizzata+7,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2706.     WBox X0Nota,Y0Nota,X1Nota,Y1Nota,16-CanaleEvento
  2707.     If EventoMusicaleEseguito=0
  2708.  
  2709.      If EventoMusicaleTagliato=#EventoMusicaleTagliato
  2710.       WLocate X0Nota,Y0Nota:WColour CanaleEvento-1,16-CanaleEvento:Print Left$("Cutted",(X1Nota-X0Nota+1)/8)
  2711.      EndIf
  2712.      If EventoMusicaleCopiato=#EventoMusicaleCopiato
  2713.       WLocate X0Nota,Y0Nota:WColour CanaleEvento-1,16-CanaleEvento:Print Left$("Copied",(X1Nota-X0Nota+1)/8)
  2714.      EndIf
  2715.  
  2716.      If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  2717.       Wline X0Nota,NotaVisualizzata,X1Nota,NotaVisualizzata+7,CanaleEvento-1
  2718.       Wline X0Nota,NotaVisualizzata+7,X1Nota,NotaVisualizzata,CanaleEvento-1
  2719.      EndIf
  2720.      If SelezioneEventoMusicale=#EventoMusicaleNonSelezionato
  2721.       Wline X0Nota+1,NotaVisualizzata+1,X1Nota-1,NotaVisualizzata+1,CanaleEvento-1
  2722.       Wline X0Nota+1,NotaVisualizzata+6,X1Nota-1,NotaVisualizzata+6,CanaleEvento-1
  2723.      EndIf
  2724.      If SelezioneEventoMusicale=#EventoMusicaleNonSelezionato
  2725.       If InizioNotaVisibile=True
  2726.        Wline I+1,NotaVisualizzata+1,I+1,NotaVisualizzata+6,CanaleEvento-1
  2727.       EndIf
  2728.       If FineNotaVisibile=True
  2729.        Wline F-1,NotaVisualizzata+1,F-1,NotaVisualizzata+6,CanaleEvento-1
  2730.       EndIf
  2731.      EndIf
  2732.     EndIf
  2733.    EndIf
  2734.   EndIf
  2735.  Case "Program"
  2736.   FineProgramma.l=InizioEvento+Len("Program000")*8-1
  2737.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineProgramma+Len("X")*8
  2738.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineProgramma+Len("Cu")*8
  2739.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineProgramma+Len("Co")*8
  2740.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2741.   F=16+FineProgramma-XInizioAreaVisibile
  2742.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2743.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  2744.     WColour 3,16-CanaleEvento
  2745.    Else
  2746.     WColour CanaleEvento-1,16-CanaleEvento
  2747.    EndIf
  2748.    Format "000":Programma$="Program"+Str$(Evento):Format ""
  2749.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then Programma$+"X"
  2750.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then Programma$+"Cu"
  2751.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Print Programma$+"Co"
  2752.    If I<0 Then IniziaPrima.b=True
  2753.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo.b=True
  2754.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2755.    Y.w=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2756.    If IniziaPrima=True Then Programma$=Right$(Programma$,(F-I+1)/8)
  2757.    If FinisceDopo=True Then Programma$=Left$(Programma$,(F-I+1)/8)
  2758.    WLocate 16+I,Y:Print Programma$
  2759.   EndIf
  2760.  Case "Control"
  2761.   FineControllo.l=InizioEvento+Len("Control000")*8-1
  2762.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineControllo+Len("X")*8
  2763.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineControllo+Len("Cu")*8
  2764.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineControllo+Len("Co")*8
  2765.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2766.   F=16+FineControllo-XInizioAreaVisibile
  2767.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2768.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  2769.     WColour 3,16-CanaleEvento
  2770.    Else
  2771.     WColour CanaleEvento-1,16-CanaleEvento
  2772.    EndIf
  2773.    Format "000":Controllo$="Control"+Str$(Evento):Format ""
  2774.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then Controllo$+"X"
  2775.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then Controllo$+"Cu"
  2776.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Print Controllo$+"Co"
  2777.    If I<0 Then IniziaPrima=True
  2778.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2779.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2780.    Y=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2781.    If IniziaPrima=True Then Controllo$=Right$(Controllo$,(F-I+1)/8)
  2782.    If FinisceDopo=True Then Controllo$=Left$(Controllo$,(F-I+1)/8)
  2783.    WLocate 16+I,Y:Print Controllo$
  2784.   EndIf
  2785.  Case "PolyAftertouch"
  2786.   FinePressioneMultipla.l=InizioEvento+Len("Poly000")*8-1
  2787.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneMultipla+Len("X")*8
  2788.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneMultipla+Len("Cu")*8
  2789.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneMultipla+Len("Co")*8
  2790.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2791.   F=16+FinePressioneMultipla-XInizioAreaVisibile
  2792.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2793.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  2794.     WColour 3,16-CanaleEvento
  2795.    Else
  2796.     WColour CanaleEvento-1,16-CanaleEvento
  2797.    EndIf
  2798.    Format "000":PressioneMultipla$="Poly"+Str$(Evento):Format ""
  2799.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then PressioneMultipla$+"X"
  2800.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then PressioneMultipla$+"Cu"
  2801.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Print PressioneMultipla$+"Co"
  2802.    If I<0 Then IniziaPrima=True
  2803.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2804.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2805.    Y=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2806.    If IniziaPrima=True Then PressioneMultipla$=Right$(PressioneMultipla$,(F-I+1)/8)
  2807.    If FinisceDopo=True Then PressioneMultipla$=Left$(PressioneMultipla$,(F-I+1)/8)
  2808.    WLocate 16+I,Y:Print PressioneMultipla$
  2809.   EndIf
  2810.  Case "MonoAftertouch"
  2811.   FinePressioneSingola.l=InizioEvento+Len("Mono000")*8-1
  2812.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneSingola+Len("X")*8
  2813.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneSingola+Len("Cu")*8
  2814.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneSingola+Len("Co")*8
  2815.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2816.   F=16+FinePressioneSingola-XInizioAreaVisibile
  2817.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2818.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  2819.     WColour 3,16-CanaleEvento
  2820.    Else
  2821.     WColour CanaleEvento-1,16-CanaleEvento
  2822.    EndIf
  2823.    Format "000":PressioneSingola$="Mono"+Str$(Evento):Format ""
  2824.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then PressioneSingola$+"X"
  2825.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then PressioneSingola$+"Cu"
  2826.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Print PressioneSingola$+"Co"
  2827.    If I<0 Then IniziaPrima=True
  2828.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2829.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2830.    Y=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2831.    If IniziaPrima=True Then PressioneSingola$=Right$(PressioneSingola$,(F-I+1)/8)
  2832.    If FinisceDopo=True Then PressioneSingola$=Left$(PressioneSingola$,(F-I+1)/8)
  2833.    WLocate 16+I,Y:Print PressioneSingola$
  2834.   EndIf
  2835.  Case "PitchBend"
  2836.   FineCurvaDiPicco.l=InizioEvento+Len("Bend+0000")*8-1
  2837.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineCurvaDiPicco+Len("X")*8
  2838.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineCurvaDiPicco+Len("Cu")*8
  2839.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineCurvaDiPicco+Len("Co")*8
  2840.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2841.   F=16+FineCurvaDiPicco-XInizioAreaVisibile
  2842.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2843.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  2844.     WColour 3,16-CanaleEvento
  2845.    Else
  2846.     WColour CanaleEvento-1,16-CanaleEvento
  2847.    EndIf
  2848.    Format "+0000":CurvaDiPicco$="Bend"+Str$(Evento-#_PitchBendCenter):Format ""
  2849.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then CurvaDiPicco$+"X"
  2850.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then CurvaDiPicco$+"Cu"
  2851.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then CurvaDiPicco$+"Co"
  2852.    If I<0 Then IniziaPrima=True
  2853.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2854.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2855.    Y=AreaVisibileDeiValori*Max(127-Evento/128+1,0)/127
  2856.    If IniziaPrima=True Then CurvaDiPicco$=Right$(CurvaDiPicco$,(F-I+1)/8)
  2857.    If FinisceDopo=True Then CurvaDiPicco$=Left$(CurvaDiPicco$,(F-I+1)/8)
  2858.    WLocate 16+I,Y:Print CurvaDiPicco$
  2859.   EndIf
  2860.  Case "Tempo"
  2861.   FineTempo.l=InizioEvento+Len("Tempo00/00")*8-1
  2862.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineTempo+Len("X")*8
  2863.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineTempo+Len("Cu")*8
  2864.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineTempo+Len("Co")*8
  2865.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2866.   F=16+FineTempo-XInizioAreaVisibile
  2867.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2868.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  2869.     WColour 3,16-CanaleEvento
  2870.    Else
  2871.     WColour CanaleEvento-1,16-CanaleEvento
  2872.    EndIf
  2873.    Format "00":Tempo$="Tempo"+Str$(Evento MOD 16+1)+"/"+Str$(Evento/16+1):Format ""
  2874.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then Tempo$+"X"
  2875.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then Tempo$+"Cu"
  2876.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Tempo$+"Co"
  2877.    If I<0 Then IniziaPrima=True
  2878.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2879.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2880.    Y=AreaVisibileDeiValori*Max(127-Evento+1,0)/127
  2881.    If IniziaPrima=True Then Tempo$=Right$(Tempo$,(F-I+1)/8)
  2882.    If FinisceDopo=True Then Tempo$=Left$(Tempo$,(F-I+1)/8)
  2883.    WLocate 16+I,Y:Print Tempo$
  2884.   EndIf
  2885.  Case "BPM"
  2886.   FineBattutePerMinuto.l=InizioEvento+Len("BPM000")*8-1
  2887.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineBattutePerMinuto+Len("X")*8
  2888.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineBattutePerMinuto+Len("Cu")*8
  2889.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineBattutePerMinuto+Len("Co")*8
  2890.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2891.   F=16+FineBattutePerMinuto-XInizioAreaVisibile
  2892.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2893.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  2894.     WColour 3,16-CanaleEvento
  2895.    Else
  2896.     WColour CanaleEvento-1,16-CanaleEvento
  2897.    EndIf
  2898.    Format "000":BattutePerMinuto$="BPM"+Str$(9+Evento):Format ""
  2899.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then BattutePerMinuto$+"X"
  2900.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then BattutePerMinuto$+"Cu"
  2901.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then BattutePerMinuto$+"Co"
  2902.    If I<0 Then IniziaPrima=True
  2903.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  2904.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  2905.    Y=AreaVisibileDeiValori*Max(97-Evento/3+1,0)/97
  2906.    If IniziaPrima=True Then BattutePerMinuto$=Right$(BattutePerMinuto$,(F-I+1)/8)
  2907.    If FinisceDopo=True Then BattutePerMinuto$=Left$(BattutePerMinuto$,(F-I+1)/8)
  2908.    WLocate 16+I,Y:Print BattutePerMinuto$
  2909.   EndIf
  2910.  End Select
  2911. End Statement
  2912.  
  2913. ;---------------------------------------------------------------
  2914. ;questa procedura mostra la scala di visualizzazione delle note
  2915. ;this procedure shows the note scale of notes displaying
  2916. ;--------------------------------------------------------
  2917. Statement MostraLaScalaDegliEventiMusicali{Ritardo.b}
  2918. SHARED AltezzaInternaFinestraEditoreSequenza
  2919. SHARED ColoriOriginali
  2920. SHARED ScalaEventiMusicali
  2921. ; For Scatola.b=0 To 4
  2922. ;  Y0Scatola.w=AltezzaInternaFinestraEditoreSequenza-8-8
  2923. ;  WBox Scatola,Y0Scatola+Scatola,15-Scatola,Y0Scatola+7-Scatola,15-Scatola
  2924. ; Next Scatola
  2925.  Select ScalaEventiMusicali
  2926.  Case 1
  2927.   Ingrandimento.b=1
  2928.  Case 2
  2929.   Ingrandimento=2
  2930.  Case 4
  2931.   Ingrandimento=3
  2932.  Case 8
  2933.   Ingrandimento=4
  2934.  Case 16
  2935.   Ingrandimento=5
  2936.  Case 32
  2937.   Ingrandimento=6
  2938.  Case 64
  2939.   Ingrandimento=7
  2940.  End Select
  2941.  WLocate 0,AltezzaInternaFinestraEditoreSequenza-8-8
  2942.  If ColoriOriginali=True Then WColour 1,0 Else WColour 2,1
  2943.  Print "Z",Ingrandimento
  2944.  If Ritardo=True Then Delay_ 50
  2945.  WLocate 0,AltezzaInternaFinestraEditoreSequenza-8-8
  2946.  Print "+-"
  2947. End Statement
  2948.  
  2949. Statement MostraITastiDaUsare{}
  2950.  MostraITastiDaUsare$="Esc>.........leave the editor|"
  2951.  MostraITastiDaUsare$+"Space>.......insert a rest|"
  2952.  MostraITastiDaUsare$+"|"
  2953.  MostraITastiDaUsare$+"No selected events:|"
  2954.  MostraITastiDaUsare$+"Cursor up>...scroll window up|"
  2955.  MostraITastiDaUsare$+"Cursor down>.scroll window down|"
  2956.  MostraITastiDaUsare$+"Cursor left>.scroll window backward|"
  2957.  MostraITastiDaUsare$+"Cursor right>scroll window forward|"
  2958.  MostraITastiDaUsare$+"Backspace>...delete last event|"
  2959.  MostraITastiDaUsare$+"|"
  2960.  MostraITastiDaUsare$+"No selected plus shift:|"
  2961.  MostraITastiDaUsare$+"Cursor left>.move insertion point backward|"
  2962.  MostraITastiDaUsare$+"Cursor right>move insertion point forward|"
  2963.  MostraITastiDaUsare$+"Backspace>...delete last event"
  2964.  EZRequest "AmySequencer help",MostraITastiDaUsare$,"OK"
  2965.  
  2966.  MostraITastiDaUsare$="With selected events:|"
  2967.  MostraITastiDaUsare$+"Cursor up>...inc sel events/tempo beat|"
  2968.  MostraITastiDaUsare$+"Cursor down>.dec sel events/tempo beat|"
  2969.  MostraITastiDaUsare$+"Cursor left>.move sel events forward|"
  2970.  MostraITastiDaUsare$+"Cursor right>move sel events backward|"
  2971.  MostraITastiDaUsare$+"Backspace>...delete last event|"
  2972.  MostraITastiDaUsare$+"|"
  2973.  MostraITastiDaUsare$+"With selected events plus shift:|"
  2974.  MostraITastiDaUsare$+"Cursor up>...move sel notes up of one octave|"
  2975.  MostraITastiDaUsare$+"             inc sel events of 10|"
  2976.  MostraITastiDaUsare$+"             inc sel tempo events measure|"
  2977.  MostraITastiDaUsare$+"Cursor down>.move sel notes down of one octave|"
  2978.  MostraITastiDaUsare$+"             dec sel events of 10|"
  2979.  MostraITastiDaUsare$+"             dec sel tempo events measure|"
  2980.  MostraITastiDaUsare$+"Cursor left>.stretch sel notes backward|"
  2981.  MostraITastiDaUsare$+"Cursor right>stretch sel notes forward|"
  2982.  MostraITastiDaUsare$+"Backspace>...delete all sel events"
  2983.  EZRequest "AmySequencer help",MostraITastiDaUsare$,"OK"
  2984.  
  2985. End Statement
  2986.  
  2987. Statement MostraLaMappaturaDelleNoteSullaTastiera{}
  2988.  MostraLaMappaturaDelleNoteSullaTastiera$="Note    lo octave hi octave|"
  2989.  MostraLaMappaturaDelleNoteSullaTastiera$+"C--Do  >........Z.........Q|"
  2990.  MostraLaMappaturaDelleNoteSullaTastiera$+"C#-Do# >........S.........2|"
  2991.  MostraLaMappaturaDelleNoteSullaTastiera$+"D--Re  >........X.........W|"
  2992.  MostraLaMappaturaDelleNoteSullaTastiera$+"D#-Re# >........D.........3|"
  2993.  MostraLaMappaturaDelleNoteSullaTastiera$+"E--Mi  >........C.........E|"
  2994.  MostraLaMappaturaDelleNoteSullaTastiera$+"F--Fa  >........V.........R|"
  2995.  MostraLaMappaturaDelleNoteSullaTastiera$+"F#-Fa# >........G.........5|"
  2996.  MostraLaMappaturaDelleNoteSullaTastiera$+"G--Sol >........B.........T|"
  2997.  MostraLaMappaturaDelleNoteSullaTastiera$+"G#-Sol#>........H.........6|"
  2998.  MostraLaMappaturaDelleNoteSullaTastiera$+"A--La  >........N.........Y|"
  2999.  MostraLaMappaturaDelleNoteSullaTastiera$+"A#-La# >........J.........7|"
  3000.  MostraLaMappaturaDelleNoteSullaTastiera$+"B--Si  >........M.........U|"
  3001.  MostraLaMappaturaDelleNoteSullaTastiera$+"|"
  3002.  MostraLaMappaturaDelleNoteSullaTastiera$+"function keys to select octave"
  3003.  EZRequest "AmySequencer help",MostraLaMappaturaDelleNoteSullaTastiera$,"OK"
  3004. End Statement
  3005.  
  3006. Statement ProgressioneEventiMusicaliCurvaDiPicco{InizioProgressione.w,FineProgressione.w}
  3007. SHARED CanaleSelezionato
  3008. SHARED EventiMusicali
  3009. SHARED EventiMusicaliSelezionati
  3010. SHARED EventoMusicale()
  3011. SHARED LarghezzaEventoBase
  3012. SHARED SequenzaSelezionata
  3013. SHARED XInizioAreaVisibile
  3014.  If CanaleSelezionato>0
  3015.   Valori.b=EZRequest("AmySequencer message","How many inner values|for the progression?","1|2|4|8|16|32|64|Cancel")
  3016.   If Valori=0 Then Statement Return
  3017.   Valori=2+2^(Valori-1)
  3018.   Passo.w=(FineProgressione-InizioProgressione)/(Valori-1)
  3019.   LastItem EventoMusicale()
  3020.   For Valore.w=InizioProgressione To FineProgressione Step Passo
  3021.    If AddItem(EventoMusicale())=True
  3022.     EventoMusicale()\Tipo="PitchBend"
  3023.     EventoMusicale()\Evento=Valore/128
  3024.     EventoMusicale()\Valore=Valore MOD 128
  3025.     EventoMusicale()\Inizio=XInizioAreaVisibile+LarghezzaEventoBase/(Valori-1)*Abs(Valore-InizioProgressione)/Passo
  3026.     EventoMusicale()\Durata=2
  3027.     EventoMusicale()\Canale=CanaleSelezionato
  3028.     EventoMusicale()\Sequenza=SequenzaSelezionata
  3029.     EventoMusicale()\Stato=#EventoMusicaleNonSelezionato
  3030.     EventiMusicali+1
  3031.     EventiMusicaliSelezionati+1
  3032.    Else
  3033.     EZRequest "AmySequencer message","You have used all the available events","OK"
  3034.     ProgressioneInterrotta.b=True
  3035.     Pop For:Goto FineCicloForProgressione
  3036.    EndIf
  3037.   Next Valore
  3038. FineCicloForProgressione
  3039.   If ProgressioneInterrotta=False Then EZRequest "AmySequencer message","Progression successfully completed!","OK"
  3040.  Else
  3041.   EZRequest "AmySequencer message","You must select a channel first","OK"
  3042.  EndIf
  3043. End Statement
  3044.  
  3045. ;---------------------------------------------------
  3046. ;questa procedura permette di cambiare la nota base
  3047. ;this procedure permits to change the basic note
  3048. ;------------------------------------------------
  3049. Statement CambiaLEventoBase{}
  3050. SHARED AltezzaFonte
  3051. SHARED ColoriOriginali
  3052. SHARED EventiMusicaliSelezionati
  3053. SHARED EventoMusicale()
  3054. SHARED LarghezzaEventoBase
  3055. SHARED ParlatoAttivato
  3056. SHARED TastoCursoreDestra$
  3057. SHARED TastoCursoreSinistra$
  3058. SHARED TastoEsc$
  3059. SHARED TipoDiEventoMusicaleDiBase$
  3060. SHARED ValoreEventoBase
  3061. SHARED XLunSlider
  3062. SHARED YLunSlider
  3063.  TipoFinestra.l=#FinestraMovibile+#GadgetNascondiFinestra+#GadgetChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  3064.  YPosF.w=(AltezzaFonte+3)*2
  3065.  YLunF.w=AltezzaFonte+3+16+8+8+2
  3066.  If TipoDiEventoMusicaleDiBase$<>"Program"
  3067.   If TipoDiEventoMusicaleDiBase$<>"PolyAftertouch" AND TipoDiEventoMusicaleDiBase$<>"MonoAftertouch"
  3068.    If TipoDiEventoMusicaleDiBase$<>"Tempo" AND TipoDiEventoMusicaleDiBase$<>"BPM"
  3069.     YLunF+8+8
  3070.    EndIf
  3071.   EndIf
  3072.  EndIf
  3073.  If TipoDiEventoMusicaleDiBase$="PitchBend" Then YLunF+8+8
  3074.  TitoloFinestra$="Basic event: "+LCase$(TipoDiEventoMusicaleDiBase$)
  3075.  Window #FinestraCambioEventoBase,4,YPosF,4+24*10+4,YLunF,TipoFinestra,TitoloFinestra$,-1,-1
  3076.  LarghezzaInternaFinestraCambioEventoBase.w=InnerWidth
  3077.  AltezzaInternaFinestraCambioEventoBase.w=InnerHeight
  3078.  CloseWindow #FinestraCambioEventoBase
  3079.  XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  3080.  YLunSlider=8
  3081.  If TipoDiEventoMusicaleDiBase$<>"Program"
  3082.   If TipoDiEventoMusicaleDiBase$<>"PolyAftertouch" AND TipoDiEventoMusicaleDiBase$<>"MonoAftertouch"
  3083.    If TipoDiEventoMusicaleDiBase$<>"Tempo" AND TipoDiEventoMusicaleDiBase$<>"BPM"
  3084.     If TipoDiEventoMusicaleDiBase$="PitchBend"
  3085.      ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8-8-8-8-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3086.      ImpostaSlider{2,0,AltezzaInternaFinestraCambioEventoBase-8-8-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3087.      ImpostaSlider{3,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3088.     Else
  3089.      ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8-8-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3090.      ImpostaSlider{2,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3091.     EndIf
  3092.    Else
  3093.     ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3094.    EndIf
  3095.   EndIf
  3096.  Else
  3097.   ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3098.  EndIf
  3099.  Window #FinestraCambioEventoBase,4,YPosF,4+24*10+4,YLunF,TipoFinestra,TitoloFinestra$,-1,-1,#ListaGadgetCambioEventoBase
  3100.  WindowFont #FonteDiCaratteriTopaz8
  3101. ; Zona.b=NewZoneTable(#TabellaZoneCambioEventoBase,9)
  3102. ; If Zona=True Then UseZoneTable #TabellaZoneCambioEventoBase Else Statement Return
  3103. ; UseZoneTable #TabellaZoneEditoreSequenza
  3104.  For Zona.b=0 To 7
  3105.   WBlit Zona,24*Zona,0;:SetZone Zona,24*Zona,0,24*Zona+23,15
  3106.  Next
  3107.  WLocate 24*8+8,4:WColour 1,0:Print "3";:SetZone 8,24*8,0,24*8+23,15
  3108.  WLocate 24*9+8,4:WColour 1,0:Print "5";:SetZone 9,24*9,0,24*9+23,15
  3109.  MostraSlider{1,(LarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3110.  If TipoDiEventoMusicaleDiBase$<>"Program"
  3111.   If TipoDiEventoMusicaleDiBase$<>"PolyAftertouch" AND TipoDiEventoMusicaleDiBase$<>"MonoAftertouch"
  3112.    If TipoDiEventoMusicaleDiBase$<>"Tempo" AND TipoDiEventoMusicaleDiBase$<>"BPM"
  3113.     If TipoDiEventoMusicaleDiBase$="PitchBend"
  3114. ;------------------------------------------------------------------------------
  3115. ;questa variabile contiene il valore finale di base dello spostamento di picco
  3116. ; delle note
  3117. ;this variable retains the basic pitch bend final value
  3118. ;-------------------------------------------------------
  3119.      FineCurvaDiPiccoEventoBase.w=#_PitchBendCenter
  3120.  
  3121. ;--------------------------------------------------------------------------------
  3122. ;questa variabile contiene il valore iniziale di base dello spostamento di picco
  3123. ; delle note
  3124. ;this variable retains the basic pitch bend initial value
  3125. ;---------------------------------------------------------
  3126.      InizioCurvaDiPiccoEventoBase.w=#_PitchBendCenter
  3127.  
  3128.      ValoreMassimo.w=16384
  3129.      Valore.w=InizioCurvaDiPiccoEventoBase
  3130.      MostraSlider{2,Valore,ValoreMassimo,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3131.      Valore.w=FineCurvaDiPiccoEventoBase
  3132.      MostraSlider{3,Valore,ValoreMassimo,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3133.     Else
  3134.      MostraSlider{2,ValoreEventoBase,127,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3135.     EndIf
  3136.    EndIf
  3137.   EndIf
  3138.  EndIf
  3139.  NuovaLarghezzaEventoBase.w=LarghezzaEventoBase
  3140.  NuovoValoreEventoBase.w=ValoreEventoBase
  3141.  NuovoInizioCurvaDiPiccoEventoBase.w=InizioCurvaDiPiccoEventoBase
  3142.  NuovaFineCurvaDiPiccoEventoBase.w=FineCurvaDiPiccoEventoBase
  3143.  EventoBaseModificato.b=False
  3144.  Repeat
  3145.   If SecondoClicDelTopo.b=False
  3146.    If TipoDiEventoMusicaleDiBase$<>"Program"
  3147.     If TipoDiEventoMusicaleDiBase$<>"PolyAftertouch" AND TipoDiEventoMusicaleDiBase$<>"MonoAftertouch"
  3148.      If TipoDiEventoMusicaleDiBase$<>"Tempo" AND TipoDiEventoMusicaleDiBase$<>"BPM"
  3149.       If TipoDiEventoMusicaleDiBase$="PitchBend"
  3150.        WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8-8-8-8-8
  3151.       Else
  3152.        WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8-8-8
  3153.       EndIf
  3154.      Else
  3155.       WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8
  3156.      EndIf
  3157.     EndIf
  3158.    Else
  3159.     WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8
  3160.    EndIf
  3161.    If NuovaLarghezzaEventoBase MOD 6=0
  3162.     If ColoriOriginali=True Then WColour 3,2 Else WColour 10,9
  3163.    Else
  3164.     WColour 2,1
  3165.    EndIf
  3166.    Format "0000":Print NuovaLarghezzaEventoBase:Format "":Print SPACE$(21)+"width"
  3167.    If TipoDiEventoMusicaleDiBase$<>"Program"
  3168.     If TipoDiEventoMusicaleDiBase$<>"PolyAftertouch" AND TipoDiEventoMusicaleDiBase$<>"MonoAftertouch"
  3169.      If TipoDiEventoMusicaleDiBase$<>"Tempo" AND TipoDiEventoMusicaleDiBase$<>"BPM"
  3170.       If TipoDiEventoMusicaleDiBase$="PitchBend"
  3171.        Y.w=AltezzaInternaFinestraCambioEventoBase-8-8-8-8
  3172.        WLocate 0,Y:WColour 1,0:Format "+0000"
  3173.        Print NuovoInizioCurvaDiPiccoEventoBase-#_PitchBendCenter:Format ""
  3174.        Valore$="initial"
  3175.       Else
  3176.        Y=AltezzaInternaFinestraCambioEventoBase-8-8
  3177.        WLocate 0,Y:WColour 1,0:Format "000":Print NuovoValoreEventoBase:Format ""
  3178.        If TipoDiEventoMusicaleDiBase$="Note" Then Valore$="velocity"
  3179.        If TipoDiEventoMusicaleDiBase$="Control" Then Valore$="value"
  3180.       EndIf
  3181.       WLocate (30-Len(Valore$))*8,Y:Print Valore$
  3182.      EndIf
  3183.     EndIf
  3184.    EndIf
  3185.    If TipoDiEventoMusicaleDiBase$="PitchBend"
  3186.     Y=AltezzaInternaFinestraCambioEventoBase-8-8
  3187.     WLocate 0,Y:WColour 1,0:Format "+0000"
  3188.     Print NuovaFineCurvaDiPiccoEventoBase-#_PitchBendCenter:Format ""
  3189.     Valore$="final":WLocate (30-Len(Valore$))*8,Y:Print Valore$
  3190.    EndIf
  3191.    SecondoClicDelTopo=True
  3192.   EndIf
  3193.   Repeat
  3194.    If ParlatoAttivato=True AND Parlato$<>"" AND Timer-TempoTrascorso.l>49 Then Speak Parlato$:Parlato$=""
  3195.    EventoFinestraCambioEventoBase.l=Event
  3196.   Until EventoFinestraCambioEventoBase>0
  3197.   Select EventoFinestraCambioEventoBase
  3198.   Case #HaiPremutoUnTastoDelTopo
  3199.    XTopo=WMouseX:YTopo=WMouseY:TastoDelTopoCliccato.b=MButtons
  3200.    Select TastoDelTopoCliccato
  3201.    Case #TastoSinistroPremutoDelTopo
  3202.     XZonaTopo.b=XTopo/24+1:YZonaTopo.b=YTopo>=0 AND YTopo<16
  3203.     If YZonaTopo=True
  3204.      Select XZonaTopo
  3205.      Case 1
  3206.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto*4:NotaPuntata.w=0:Terzina.b=0:Cinquina.b=0
  3207.       Parlato$="You have choosen a whole note width"
  3208.      Case 2
  3209.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto*2:NotaPuntata=0:Terzina=0:Cinquina=0
  3210.       Parlato$="You have choosen a half note width"
  3211.      Case 3
  3212.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto:NotaPuntata=0:Terzina=0:Cinquina=0
  3213.       Parlato$="You have choosen a quarter note width"
  3214.      Case 4
  3215.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto/2:NotaPuntata=0:Terzina=0:Cinquina=0
  3216.       Parlato$="You have choosen an eighth note width"
  3217.      Case 5
  3218.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto/4:NotaPuntata=0:Terzina=0:Cinquina=0
  3219.       Parlato$="You have choosen a sixteenth note width"
  3220.      Case 6
  3221.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto/8:NotaPuntata=0:Terzina=0:Cinquina=0
  3222.       Parlato$="You have choosen a thirty second note width"
  3223.      Case 7
  3224.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto/16:NotaPuntata=0:Terzina=0:Cinquina=0
  3225.       Parlato$="You have choosen a sixty fourth note width"
  3226.      Case 8
  3227.       If NotaPuntata=0
  3228.        NotaPuntata=NuovaLarghezzaEventoBase/2
  3229.        NuovaLarghezzaEventoBase+NotaPuntata
  3230.        If Terzina>0
  3231.         Terzina=0
  3232.         Parlato$="You have no more a triplet note width, you have choosen a dotted note width"
  3233.        Else
  3234.         If Cinquina>0
  3235.          Cinquina=0
  3236.          Parlato$="You have no more a quintet note width, you have choosen a dotted note width"
  3237.         Else
  3238.          Parlato$="You have choosen a dotted note width"
  3239.         EndIf
  3240.        EndIf
  3241.       Else
  3242.        NuovaLarghezzaEventoBase/3*2
  3243.        NotaPuntata=0
  3244.        Parlato$="You have no more a dotted note width"
  3245.       EndIf
  3246.      Case 9
  3247.       If Terzina=0 AND NuovaLarghezzaEventoBase>5
  3248.        Terzina=3:NuovaLarghezzaEventoBase/Terzina
  3249.        If NotaPuntata>0
  3250.         NotaPuntata=0
  3251.         Parlato$="You have no more a dotted note width, you have choosen a triplet note width"
  3252.        Else
  3253.         If Cinquina>0
  3254.          Cinquina=0
  3255.          Parlato$="You have no more a quintet note width, you have choosen a triplet note width"
  3256.         Else
  3257.          Parlato$="You have choosen a triplet note width"
  3258.         EndIf
  3259.        EndIf
  3260.       Else
  3261.        NuovaLarghezzaEventoBase*Terzina
  3262.        Terzina=0
  3263.        Parlato$="You have no more a triplet note width"
  3264.       EndIf
  3265.      Case 10
  3266.       If Cinquina=0 AND NuovaLarghezzaEventoBase>9
  3267.        Cinquina=5:NuovaLarghezzaEventoBase/Cinquina
  3268.        If NotaPuntata>0
  3269.         NotaPuntata=0
  3270.         Parlato$="You have no more a dotted note width, you have choosen a quintet note width"
  3271.        Else
  3272.         If Terzina>0
  3273.          Parlato$="You have no more a triplet note width, you have choosen a quintet note width"
  3274.         Else
  3275.          Parlato$="You have choosen a quintet note width"
  3276.         EndIf
  3277.        EndIf
  3278.       Else
  3279.        NuovaLarghezzaEventoBase*Cinquina
  3280.        Cinquina=0
  3281.        Parlato$="You have no more a quintet note width"
  3282.       EndIf
  3283.      End Select
  3284.      If XZonaTopo>0 AND XZonaTopo<11
  3285. MostraSlider{1,(NuovaLarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3286.       Parlato$+", that are "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3287.      EndIf
  3288.     EndIf
  3289.     SecondoClicDelTopo=False
  3290.     TempoTrascorso=Timer
  3291.    Case 5
  3292.     SecondoClicDelTopo=True
  3293.    End Select
  3294. ;  Case #HaiPremutoUnGadget
  3295. ;   XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  3296. ;   Select GadgetHit
  3297. ;   Case 1
  3298. ;    NuovaLarghezzaEventoBase=ValoreSlider{1,(192*6-2)/2,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}*2+2
  3299. ;    NotaPuntata=0:Terzina=0
  3300. ;    Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3301. ;   Case 2
  3302. ;    If TipoDiEventoMusicaleDiBase$="PitchBend"
  3303. ;     NuovoInizioCurvaDiPiccoEventoBase=ValoreSlider{2,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3304. ;    Else
  3305. ;     NuovoValoreEventoBase=ValoreSlider{2,127,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3306. ;    EndIf
  3307. ;    If TipoDiEventoMusicaleDiBase$="Note" Then Parlato$="You have choosen a note velocity of "+Str$(NuovoValoreEventoBase)+"."
  3308. ;    If TipoDiEventoMusicaleDiBase$="Control" Then Parlato$="You have choosen a value of "+Str$(NuovoValoreEventoBase)+"."
  3309. ;    If TipoDiEventoMusicaleDiBase$="PitchBend"
  3310. ;    Parlato$="You have choosen a bend inital value of "+Str$(NuovoInizioCurvaDiPiccoEventoBase-#_pitchBendCenter)+"."
  3311. ;    EndIf
  3312. ;   Case 3
  3313. ;    NuovaFineCurvaDiPiccoEventoBase=ValoreSlider{3,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3314. ;    Parlato$="You have choosen a bend final value of "+Str$(NuovaFineCurvaDiPiccoEventoBase-#_PitchBendCenter)+"."
  3315. ;   End Select
  3316. ;   SecondoClicDelTopo=False
  3317. ;   TempoTrascorso=Timer
  3318.   Case #HaiRilasciatoUnGadget
  3319.    XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  3320.    Select GadgetHit
  3321.    Case 1
  3322.     NuovaLarghezzaEventoBase=ValoreSlider{1,(192*6-2)/2,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}*2+2
  3323.     NotaPuntata=0:Terzina=0
  3324.     Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3325.    Case 2
  3326.     If TipoDiEventoMusicaleDiBase$="PitchBend"
  3327.      NuovoInizioCurvaDiPiccoEventoBase=ValoreSlider{2,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3328.     Else
  3329.      NuovoValoreEventoBase=ValoreSlider{2,127,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3330.     EndIf
  3331.     If TipoDiEventoMusicaleDiBase$="Note" Then Parlato$="You have choosen a note velocity of "+Str$(NuovoValoreEventoBase)+"."
  3332.     If TipoDiEventoMusicaleDiBase$="Control" Then Parlato$="You have choosen a value of "+Str$(NuovoValoreEventoBase)+"."
  3333.     If TipoDiEventoMusicaleDiBase$="PitchBend"
  3334.      Parlato$="You have choosen a bend initial value of "+Str$(NuovoInizioCurvaDiPiccoEventoBase-#_PitchBendCenter)+"."
  3335.     EndIf
  3336.    Case 3
  3337.     NuovaFineCurvaDiPiccoEventoBase=ValoreSlider{3,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3338.     Parlato$="You have choosen a bend final value of "+Str$(NuovaFineCurvaDiPiccoEventoBase-#_PitchBendCenter)+"."
  3339.    End Select
  3340.    SecondoClicDelTopo=False
  3341.    TempoTrascorso=Timer
  3342.   Case #HaiChiusoLaFinestra
  3343.    EsciDalCambioEventoBase=True
  3344.   Case #HaiPremutoUnTasto
  3345.    TastoPremuto$=LCase$(Inkey$)
  3346.    Select TastoPremuto$
  3347.    Case TastoEsc$
  3348.     EsciDalCambioEventoBase=True
  3349.    Case TastoCursoreDestra$
  3350.     If NuovaLarghezzaEventoBase<#TicDiBasePerQuarto*6-2
  3351.      NuovaLarghezzaEventoBase+2:NotaPuntata=0:Terzina=0:Cinquina=0
  3352. MostraSlider{1,(NuovaLarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3353.      Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3354.     EndIf
  3355.    Case TastoCursoreSinistra$
  3356.     If NuovaLarghezzaEventoBase>3
  3357.      NuovaLarghezzaEventoBase-2:NotaPuntata=0:Terzina=0:Cinquina=0
  3358. MostraSlider{1,(NuovaLarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3359.      Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3360.     EndIf
  3361.    End Select
  3362.    SecondoClicDelTopo=False
  3363.    TempoTrascorso=Timer
  3364.   End Select
  3365.  Until EsciDalCambioEventoBase=True
  3366.  If NuovaLarghezzaEventoBase<>LarghezzaEventoBase Then EventoBaseModificato=True
  3367.  If NuovoValoreEventoBase<>ValoreEventoBase Then EventoBaseModificato=True
  3368.  LarghezzaEventoBase=NuovaLarghezzaEventoBase
  3369.  ValoreEventoBase=NuovoValoreEventoBase
  3370.  If EventiMusicaliSelezionati>0
  3371.   If EventoBaseModificato=True
  3372.    Messaggio$="You have made changes:"
  3373.   Else
  3374.    Messaggio$="You have made no changes:"
  3375.   EndIf
  3376.   Messaggio$+"|Would you apply the current|settings to the selected events?"
  3377.   ApplicaINuoviValoriAgliEventiMusicaliSelezionati.b=EZRequest("AmySequencer message",Messaggio$,"Yes|No")
  3378.   If ApplicaINuoviValoriAgliEventiMusicaliSelezionati=1
  3379.    Select TipoDiEventoMusicaleDiBase$
  3380.    Case "Note"
  3381.     AggiustaInizio.b=EZRequest("AmySequencer message","Quantize notes start?","Yes|No")
  3382.     AggiustaDurata.b=EZRequest("AmySequencer message","Quantize notes length?","Yes|No")
  3383.     AggiustaValore.b=EZRequest("AmySequencer message","Change notes velocity?","Yes|No")
  3384.    Case "Program"
  3385.     AggiustaInizio=EZRequest("AmySequencer message","Quantize programs start?","Yes|No")
  3386.    Case "Control"
  3387.     AggiustaInizio=EZRequest("AmySequencer message","Quantize controls start?","Yes|No")
  3388.     AggiustaValore=EZRequest("AmySequencer message","Change controls value?","Yes|No")
  3389.    Case "PolyAftertouch"
  3390.     AggiustaInizio=EZRequest("AmySequencer message","Quantize programs start?","Yes|No")
  3391.    Case "MonoAftertouch"
  3392.     AggiustaInizio=EZRequest("AmySequencer message","Quantize programs start?","Yes|No")
  3393.    Case "PitchBend"
  3394.     AggiustaInizio=EZRequest("AmySequencer message","Quantize pitch bends start?","Yes|No")
  3395.    Case "Tempo"
  3396.     AggiustaInizio=EZRequest("AmySequencer message","Quantize tempo events start?","Yes|No")
  3397.    Case "BPM"
  3398.     AggiustaInizio=EZRequest("AmySequencer message","Quantize BPM events start?","Yes|No")
  3399.    End Select
  3400.    ResetList EventoMusicale()
  3401.    While NextItem(EventoMusicale())=True
  3402.     StatoEventoMusicale.b=EventoMusicale()\Stato
  3403.     SelezioneEventoMusicale.b=StatoEventoMusicale & #EventoMusicaleSelezionato
  3404.     If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  3405.      Select EventoMusicale()\Tipo
  3406.      Case "Note"
  3407.       If AggiustaValore=1 Then EventoMusicale()\Valore=ValoreEventoBase
  3408.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3409.       If AggiustaDurata=1 Then EventoMusicale()\Durata/LarghezzaEventoBase*LarghezzaEventoBase
  3410.      Case "Program"
  3411.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3412.      Case "PolyAftertouch"
  3413.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3414.      Case "MonoAftertouch"
  3415.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3416.      Case "Control"
  3417.       If AggiustaValore=1 Then EventoMusicale()\Valore=ValoreEventoBase
  3418.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3419.      Case "PitchBend"
  3420.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3421.      Case "Tempo"
  3422.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3423.      Case "BPM"
  3424.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3425.      End Select
  3426.     EndIf
  3427.    Wend
  3428.   EndIf
  3429.  EndIf
  3430.  If NuovoInizioCurvaDiPiccoEventoBase<>InizioCurvaDiPiccoEventoBase Then Progressione.b=True
  3431.  If NuovaFineCurvaDiPiccoEventoBase<>FineCurvaDiPiccoEventoBase Then Progressione=True
  3432.  If Progressione=True
  3433.   ProgressioneEventiMusicaliCurvaDiPicco{NuovoInizioCurvaDiPiccoEventoBase,NuovaFineCurvaDiPiccoEventoBase}
  3434.   InizioCurvaDiPiccoEventoBase=NuovoInizioCurvaDiPiccoEventoBase
  3435.   FineCurvaDiPiccoEventoBase=NuovaFineCurvaDiPiccoEventoBase
  3436.  EndIf
  3437.  
  3438. ;*************************************************************
  3439. ;la seguente linea se attivata da' errore quando non dovrebbe
  3440. ;the following line if avtivated gives an error when it should not do
  3441. ;*********************************************************************
  3442. ; FreeZoneTable(#TabellaZoneCambioEventoBase)
  3443.  
  3444.  CloseWindow #FinestraCambioEventoBase
  3445.  Use Window #FinestraEditoreSequenza
  3446.  
  3447. ;***************************************************
  3448. ;il seguente comando sembra non avere alcun effetto
  3449. ;the following command seems have no effect
  3450. ;*******************************************
  3451. ; UseZoneTable #TabellaZoneEditoreSequenza
  3452.  
  3453. End Statement
  3454.  
  3455. ;---------------------------------------------------------------
  3456. ;this procedure states the selected by mouse event new position
  3457. ;questa procedura mostra la nuova posizione dell'evento selezionato col mouse
  3458. ;-----------------------------------------------------------------------------
  3459. Statement MostraNuovaPosizioneEvento{XEvento.l,YEvento.b}
  3460. SHARED AltezzaInternaFinestraEditoreSequenza
  3461. SHARED AreaVisibileDeiValori
  3462. SHARED EventoMusicale()
  3463. SHARED LarghezzaEventoBase
  3464. SHARED LarghezzaInternaFinestraEditoreSequenza
  3465. SHARED MostraNuovoValore
  3466. SHARED ScalaEventiMusicali
  3467. SHARED TipoDiEventoMusicaleDiBase$
  3468. SHARED XInizioAreaVisibile
  3469. SHARED YInizioAreaVisibile
  3470.  X0.w=16+(XEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3471.  Select TipoDiEventoMusicaleDiBase$
  3472.  Case "Note"
  3473.   Y0.w=(127-YInizioAreaVisibile-YEvento)*8
  3474.   X1.w=X0+(LarghezzaEventoBase-1)/ScalaEventiMusicali
  3475.  Case "Program"
  3476.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3477.   X1=X0+Len("Program000X")*8-1
  3478.  Case "Control"
  3479.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3480.   X1=X0+Len("Control000X")*8-1
  3481.  Case "PolyAftertouch"
  3482.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3483.   X1=X0+Len("Poly000X")*8-1
  3484.  Case "MonoAftertouch"
  3485.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3486.   X1=X0+Len("Mono000X")*8-1
  3487.  Case "PitchBend"
  3488.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3489.   X1=X0+Len("Bend+0000X")*8-1
  3490.  Case "Tempo"
  3491.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  3492.   X1=X0+Len("Tempo00/00X")*8-1
  3493.  Case "BPM"
  3494.   Y0=AreaVisibileDeiValori*Max((97-YEvento+1),0)/97
  3495.   X1=X0+Len("BPM000X")*8-1
  3496.  End Select
  3497.  Y1.w=Y0+7
  3498.  X0=Min(Max(X0,16),LarghezzaInternaFinestraEditoreSequenza-1)
  3499.  Y0=Min(Max(Y0,0),AltezzaInternaFinestraEditoreSequenza-1-8-8-7)
  3500.  X1=Min(Max(X1,16),LarghezzaInternaFinestraEditoreSequenza-1)
  3501.  Y1=Min(Max(Y1,7),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  3502.  WJam #SecondaVoltaStessoColore
  3503.  If MostraNuovoValore=True
  3504.   WLocate X0,Y0
  3505.   Select TipoDiEventoMusicaleDiBase$
  3506.   Case "Note"
  3507.    Wline X0,Y0,X1,Y0,X1,Y1,X0,Y1,X0,Y0,0
  3508.   Case "Program"
  3509.    Format "000":Print "Program",Str$(YEvento),"X":Format ""
  3510.   Case "Control"
  3511.    Format "000":Print "Control",Str$(YEvento),"X":Format ""
  3512.   Case "PolyAftertouch"
  3513.    Format "000":Print "Poly",Str$(YEvento),"X":Format ""
  3514.   Case "MonoAftertouch"
  3515.    Format "000":Print "Mono",Str$(YEvento),"X":Format ""
  3516.   Case "PitchBend"
  3517.    Format "+0000":Print "Bend",Str$(YEvento*128+EventoMusicale()\Valore-#_PitchBendCenter),"X":Format ""
  3518.   Case "Tempo"
  3519.    Format "00":Print "Tempo",Str$(YEvento MOD 16+1),"/",Str$(YEvento/16+1),"X":Format ""
  3520.   Case "BPM"
  3521.    Format "000":Print "BPM",Str$(9+YEvento*3+EventoMusicale()\Valore),"X":Format ""
  3522.   End Select
  3523.  Else
  3524.   Wline X0,Y0,X1,Y0,X1,Y1,X0,Y1,X0,Y0,0
  3525.  EndIf
  3526.  WJam #DueColoriConSfondoPieno
  3527. End Statement
  3528.  
  3529. ;------------------------------------------------------------------------------
  3530. ;questa procedura permette di spostare gli eventi selezionati cliccando con il
  3531. ; mouse su uno di essi
  3532. ;this procedure permits to move the selected events clicking on one of these
  3533. ;----------------------------------------------------------------------------
  3534. Statement MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneEvento.l,YPosizioneEvento.b}
  3535. SHARED AltezzaInternaFinestraEditoreSequenza
  3536. SHARED AreaVisibileDeiValori
  3537. SHARED Battiti
  3538. SHARED CanaleSelezionato
  3539. SHARED DurataSequenza
  3540. SHARED EventoMusicale()
  3541. SHARED EventoMusicaleSpostatoConIlTopo
  3542. SHARED LarghezzaEventoBase
  3543. SHARED Misure
  3544. SHARED MostraNuovoValore
  3545. SHARED ScalaEventiMusicali
  3546. SHARED SequenzaSelezionata
  3547. SHARED XInizioAreaVisibile
  3548. SHARED YInizioAreaVisibile
  3549. SHARED YPosizioneNota
  3550.  XPosizioneEvento/LarghezzaEventoBase*LarghezzaEventoBase
  3551.  Repeat
  3552.   NuovaXTopo.w=WMouseX:NuovaYTopo.w=WMouseY:TastoPremutoDelTopo.b=Joyb(0)
  3553.   TipoDiEventoMusicale$=EventoMusicale()\Tipo
  3554.   CanaleEvento.b=EventoMusicale()\Canale
  3555.   Select TipoDiEventoMusicale$
  3556.   Case "Note"
  3557.    XNuovaPosizioneNota.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3558.    XNuovaPosizioneNota/LarghezzaEventoBase*LarghezzaEventoBase
  3559.    If XNuovaPosizioneNota<>XPosizioneEvento
  3560.     IncrementoXEventoMusicale.l=XNuovaPosizioneNota-XPosizioneEvento
  3561.     EventoMusicaleSpostatoConIlTopo=True
  3562.    Else
  3563.     IncrementoXEventoMusicale=0
  3564.    EndIf
  3565.    YNuovaPosizioneNota.b=127-YInizioAreaVisibile-NuovaYTopo/8
  3566.    If YNuovaPosizioneNota<>YPosizioneEvento
  3567.     IncrementoYEventoMusicale.b=YNuovaPosizioneNota-YPosizioneEvento
  3568.     EventoMusicaleSpostatoConIlTopo=True
  3569.    Else
  3570.     IncrementoYEventoMusicale=0
  3571.    EndIf
  3572.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3573.     EventoMusicaleSpostatoConIlTopo=False
  3574.    Else
  3575.     Messaggio$="Note>"+Str$(IncrementoYEventoMusicale)
  3576.    EndIf
  3577.   Case "Program"
  3578.    XNuovaPosizioneProgramma.l=XInizioAreaVisbile+(NuovaXTopo-16)*ScalaEventiMusicali
  3579.    XNuovaPosizioneProgramma/LarghezzaEventoBase*LarghezzaEventoBase
  3580.    If XNuovaPosizioneProgramma<>XPosizioneEvento
  3581.     IncrementoXEventoMusicale=XNuovaPosizioneProgramma-XPosizioneEvento
  3582.     EventoMusicaleSpostatoConIlTopo=True
  3583.    Else
  3584.     IncrementoXEventoMusicale=0
  3585.    EndIf
  3586.    YNuovaPosizioneProgramma.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3587.    If YNuovaPosizioneProgramma<0
  3588.     If NuovaYTopo<0 Then YNuovaPosizioneProgramma=127
  3589.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneProgramma=0
  3590.    EndIf
  3591.    If YNuovaPosizioneProgramma<>YPosizioneEvento
  3592.     IncrementoYEventoMusicale=YNuovaPosizioneProgramma-YPosizioneEvento
  3593.     EventoMusicaleSpostatoConIlTopo=True
  3594.    Else
  3595.     IncrementoYEventoMusicale=0
  3596.    EndIf
  3597.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3598.     EventoMusicaleSpostatoConIlTopo=False
  3599.    Else
  3600.     Messaggio$="Program>"+Str$(IncrementoYEventoMusicale)
  3601.    EndIf
  3602.   Case "Control"
  3603.    XNuovaPosizioneControllo.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3604.    XNuovaPosizioneControllo/LarghezzaEventoBase*LarghezzaEventoBase
  3605.    If XNuovaPosizioneControllo<>XPosizioneEvento
  3606.     IncrementoXEventoMusicale=XNuovaPosizioneControllo-XPosizioneEvento
  3607.     EventoMusicaleSpostatoConIlTopo=True
  3608.    Else
  3609.     IncrementoXEventoMusicale=0
  3610.    EndIf
  3611.    YNuovaPosizioneControllo.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3612.    If YNuovaPosizioneControllo<0
  3613.     If NuovaYTopo<0 Then YNuovaPosizioneControllo=127
  3614.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneControllo=0
  3615.    EndIf
  3616.    If YNuovaPosizioneControllo<>YPosizioneEvento
  3617.     IncrementoYEventoMusicale=YNuovaPosizioneControllo-YPosizioneEvento
  3618.     EventoMusicaleSpostatoConIlTopo=True
  3619.    Else
  3620.     IncrementoYEventoMusicale=0
  3621.    EndIf
  3622.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3623.     EventoMusicaleSpostatoConIlTopo=False
  3624.    Else
  3625.     Messaggio$="Control>"+Str$(IncrementoYEventoMusicale)
  3626.    EndIf
  3627.   Case "PolyAftertouch"
  3628.    XNuovaPosizionePressioneMultipla.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3629.    XNuovaPosizionePressioneMultipla/LarghezzaEventoBase*LarghezzaEventoBase
  3630.    If XNuovaPosizionePressioneMultipla<>XPosizioneEvento
  3631.     IncrementoXEventoMusicale=XNuovaPosizionePressioneMultipla-XPosizioneEvento
  3632.     EventoMusicaleSpostatoConIlTopo=True
  3633.    Else
  3634.     IncrementoXEventoMusicale=0
  3635.    EndIf
  3636.    YNuovaPosizionePressioneMultipla.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3637.    If YNuovaPosizionePressioneMultipla<0
  3638.     If NuovaYTopo<0 Then YNuovaPosizionePressioneMultipla=127
  3639.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizionePressioneMultipla=0
  3640.    EndIf
  3641.    If YNuovaPosizionePressioneMultipla<>YPosizioneEvento
  3642.     IncrementoYEventoMusicale=YNuovaPosizionePressioneMultipla-YPosizioneEvento
  3643.     EventoMusicaleSpostatoConIlTopo=True
  3644.    Else
  3645.     IncrementoYEventoMusicale=0
  3646.    EndIf
  3647.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3648.     EventoMusicaleSpostatoConIlTopo=False
  3649.    Else
  3650.     Messaggio$="Poly>"+Str$(IncrementoYEventoMusicale)
  3651.    EndIf
  3652.   Case "MonoAftertouch"
  3653.    XNuovaPosizionePressioneSingola.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3654.    XNuovaPosizionePressioneSingola/LarghezzaEventoBase*LarghezzaEventoBase
  3655.    If XNuovaPosizionePressioneSingola<>XPosizioneEvento
  3656.     IncrementoXEventoMusicale=XNuovaPosizionePressioneSingola-XPosizioneEvento
  3657.     EventoMusicaleSpostatoConIlTopo=True
  3658.    Else
  3659.     IncrementoXEventoMusicale=0
  3660.    EndIf
  3661.    YNuovaPosizionePressioneSingola.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3662.    If YNuovaPosizionePressioneSingola<0
  3663.     If NuovaYTopo<0 Then YNuovaPosizionePressioneSingola=127
  3664.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizionePressioneSingola=0
  3665.    EndIf
  3666.    If YNuovaPosizionePressioneMultipla<>YPosizioneEvento
  3667.     IncrementoYEventoMusicale=YNuovaPosizionePressioneSingola-YPosizioneEvento
  3668.     EventoMusicaleSpostatoConIlTopo=True
  3669.    Else
  3670.     IncrementoYEventoMusicale=0
  3671.    EndIf
  3672.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3673.     EventoMusicaleSpostatoConIlTopo=False
  3674.    Else
  3675.     Messaggio$="Mono>"+Str$(IncrementoYEventoMusicale)
  3676.    EndIf
  3677.   Case "PitchBend"
  3678.    XNuovaPosizioneCurvaDiPicco.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3679.    XNuovaPosizioneCurvaDiPicco/LarghezzaEventoBase*LarghezzaEventoBase
  3680.    If XNuovaPosizioneCurvaDiPicco<>XPosizioneEvento
  3681.     IncrementoXEventoMusicale=XNuovaPosizioneCurvaDiPicco-XPosizioneEvento
  3682.     EventoMusicaleSpostatoConIlTopo=True
  3683.    Else
  3684.     IncrementoXEventoMusicale=0
  3685.    EndIf
  3686.    YNuovaPosizioneCurvaDiPicco.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3687.    If YNuovaPosizioneCurvaDiPicco<0
  3688.     If NuovaYTopo<0 Then YNuovaPosizioneCurvaDiPicco=127
  3689.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneCurvaDiPicco=0
  3690.    EndIf
  3691.    If YNuovaPosizioneCurvaDiPicco<>YPosizioneEvento
  3692.     IncrementoYEventoMusicale=YNuovaPosizioneCurvaDiPicco-YPosizioneEvento
  3693.     EventoMusicaleSpostatoConIlTopo=True
  3694.    Else
  3695.     IncrementoYEventoMusicale=0
  3696.    EndIf
  3697.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3698.     EventoMusicaleSpostatoConIlTopo=False
  3699.    Else
  3700.     Messaggio$="Bend>"+Str$(IncrementoYEventoMusicale*128)
  3701.    EndIf
  3702.   Case "Tempo"
  3703.    XNuovaPosizioneTempo.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3704.    XNuovaPosizioneTempo/LarghezzaEventoBase*LarghezzaEventoBase
  3705.    If XNuovaPosizioneTempo<>XPosizioneEvento
  3706.     IncrementoXEventoMusicale=XNuovaPosizioneTempo-XPosizioneEvento
  3707.     EventoMusicaleSpostatoConIlTopo=True
  3708.    Else
  3709.     IncrementoXEventoMusicale=0
  3710.    EndIf
  3711.    YNuovaPosizioneTempo.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  3712.    If YNuovaPosizioneTempo<0
  3713.     If NuovaYTopo<0 Then YNuovaPosizioneTempo=127
  3714.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneTempo=0
  3715.    EndIf
  3716.    If YNuovaPosizioneTempo<>YPosizioneEvento
  3717.     IncrementoYEventoMusicale=YNuovaPosizioneTempo-YPosizioneEvento
  3718.     EventoMusicaleSpostatoConIlTopo=True
  3719.    Else
  3720.     IncrementoYEventoMusicale=0
  3721.    EndIf
  3722.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3723.     EventoMusicaleSpostatoConIlTopo=False
  3724.    Else
  3725.     NuoviBattiti.b=IncrementoYEventoMusicale MOD 16
  3726.     NuoveMisure.b=Abs(IncrementoYEventoMusicale/16)
  3727.     Messaggio$="Tempo>":If Sgn(IncrementoYEventoMusicale)=-1 Then Messaggio$+"-"
  3728.     Messaggio$+Str$(NuoviBattiti)+"/"+Str$(NuoveMisure)
  3729.    EndIf
  3730.   Case "BPM"
  3731.    XNuovaPosizioneBattutePerMinuto.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3732.    XNuovaPosizioneBattutePerMinuto/LarghezzaEventoBase*LarghezzaEventoBase
  3733.    If XNuovaPosizioneBattutePerMinuto<>XPosizioneEvento
  3734.     IncrementoXEventoMusicale=XNuovaPosizioneBattutePerMinuto-XPosizioneEvento
  3735.     EventoMusicaleSpostatoConIlTopo=True
  3736.    Else
  3737.     IncrementoXEventoMusicale=0
  3738.    EndIf
  3739.    YNuovaPosizioneBattutePerMinuto.b=97-NuovaYTopo*97/AreaVisibileDeiValori
  3740.    If YNuovaPosizioneBattutePerMinuto<0
  3741.  
  3742. ;---------------------------------------------------------------------------
  3743. ;il valore massimo per le battute per minuto e' di 97*3, cioe' 291, piu' il
  3744. ; valore di partenza che e' 10, meno 1 dato che questo e' compreso, fa 300
  3745. ;the maximum value for BPM events is 97*3, that is 291, plus the start value
  3746. ; that is 10, minus 1 seen that this is included, it gives 300
  3747. ;--------------------------------------------------------------
  3748.     If NuovaYTopo<0 Then YNuovaPosizioneBattutePerMinuto=97
  3749.  
  3750. ;----------------------------------------------------------------------------
  3751. ;il valore minimo per le battute per minuto e' di 10, che corrisponde a zero
  3752. ; dato che viene sommato in seguito
  3753. ;the minimum value for BPM events is 10, that correspond to zero seen that it
  3754. ; is added after
  3755. ;----------------
  3756.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneBattutePerMinuto=0
  3757.  
  3758.    EndIf
  3759.    If YNuovaPosizioneBattutePerMinuto<>YPosizioneEvento
  3760.     IncrementoYEventoMusicale=YNuovaPosizioneBattutePerMinuto-YPosizioneEvento
  3761.     EventoMusicaleSpostatoConIlTopo=True
  3762.    Else
  3763.     IncrementoYEventoMusicale=0
  3764.    EndIf
  3765.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3766.     EventoMusicaleSpostatoConIlTopo=False
  3767.    Else
  3768.     BattutePerMinuto.w=IncrementoYEventoMusicale*3+EventoMusicale()\Valore
  3769.     Messaggio$="BPM>"+Str$(BattutePerMinuto)
  3770.    EndIf
  3771.   End Select
  3772.   Select TipoDiEventoMusicale$
  3773.   Case "Note"
  3774.    NuovaXEvento.l=XNuovaPosizioneNota:NuovaYEvento.b=YNuovaPosizioneNota
  3775.   Case "Program"
  3776.    NuovaXEvento=XNuovaPosizioneProgramma:NuovaYEvento=YNuovaPosizioneProgramma
  3777.   Case "Control"
  3778.    NuovaXEvento=XNuovaPosizioneControllo:NuovaYEvento=YNuovaPosizioneControllo
  3779.   Case "PolyAftertouch"
  3780.    NuovaXEvento=XNuovaPosizionePressioneMultipla:NuovaYEvento=YNuovaPosizionePressioneMultipla
  3781.   Case "MonoAftertouch"
  3782.    NuovaXEvento=XNuovaPosizionePressioneSingola:NuovaYEvento=YNuovaPosizionePressioneSingola
  3783.   Case "PitchBend"
  3784.    NuovaXEvento=XNuovaPosizioneCurvaDiPicco:NuovaYEvento=YNuovaPosizioneCurvaDiPicco
  3785.   Case "Tempo"
  3786.    NuovaXEvento=XNuovaPosizioneTempo:NuovaYEvento=YNuovaPosizioneTempo
  3787.   Case "BPM"
  3788.    NuovaXEvento=XNuovaPosizioneBattutePerMinuto:NuovaYEvento=YNuovaPosizioneBattutePerMinuto
  3789.   End Select
  3790.   MostraNuovaPosizioneEvento{NuovaXEvento,NuovaYEvento}
  3791.   If EventoMusicaleSpostatoConIlTopo=False
  3792.    Messaggio$="No change made"
  3793.   EndIf
  3794.   XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  3795.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3796.   WLocate XMessaggio,YMessaggio
  3797.   Print SPACE$(80-XMessaggio/8)
  3798.   WLocate XMessaggio,YMessaggio
  3799.   WColour CanaleSelezionato-1,16-CanaleSelezionato
  3800.   Print Messaggio$
  3801.   If EventoMusicaleSpostatoConIlTopo=True
  3802.    Print " pos>":ConvertiIlTempoInBattute{IncrementoXEventoMusicale,Battiti,Misure,False}
  3803.   EndIf
  3804.   VWait
  3805.   MostraNuovaPosizioneEvento{NuovaXEvento,NuovaYEvento}
  3806.  Until TastoPremutoDelTopo<>#TastoSinistroPremutoDelTopo
  3807.  If EventoMusicaleSpostatoConIlTopo=True
  3808.   PushItem EventoMusicale()
  3809.   ResetList EventoMusicale()
  3810.   While NextItem(EventoMusicale())=True
  3811.    If EventoMusicale()\Sequenza=SequenzaSelezionata
  3812.     StatoEventoMusicale.b=EventoMusicale()\Stato
  3813.     SelezioneEventoMusicale.b=StatoEventoMusicale & #EventoMusicaleSelezionato
  3814.     If EventoMusicale()\Tipo=TipoDiEventoMusicale$ AND SelezioneEventoMusicale=#EventoMusicaleSelezionato
  3815.      EventoMusicale()\Evento+IncrementoYEventoMusicale
  3816.      If TipoDiEventoMusicaleDiBase$="BPM"
  3817.       EventoMusicale()\Evento=Min(Max(EventoMusicale()\Evento,0),97)
  3818.       If EventoMusicale()\Evento=97 Then EventoMusicale()\Valore=0
  3819.       If EventoMusicale()\Evento=0 Then EventoMusicale()\Valore=1
  3820.      Else
  3821.       EventoMusicale()\Evento=Min(Max(EventoMusicale()\Evento,0),127)
  3822.      EndIf
  3823.      EventoMusicale()\Inizio+IncrementoXEventoMusicale
  3824.      If EventoMusicale()\Inizio<0 Then EventoMusicale()\Inizio=0
  3825.      DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+Max(EventoMusicale()\Durata,LarghezzaEventoBase))
  3826.     EndIf
  3827.    EndIf
  3828.   Wend
  3829.   PopItem EventoMusicale()
  3830.  EndIf
  3831. End Statement
  3832.  
  3833. ;----------------------------------------
  3834. ;questa procedura suona la nota corrente
  3835. ;this procedure plays the current note
  3836. ;--------------------------------------
  3837. Statement SuonaLaNota{Nota.b,VelocitaNota.b,CanaleNota.b,Modo.b}
  3838. SHARED AltezzaInternaFinestraEditoreSequenza
  3839. SHARED MIDIAttivato
  3840. SHARED NoteSuonate
  3841. SHARED PeriFreq()
  3842. SHARED Suono()
  3843. SHARED VoceSpenta
  3844. SHARED VoceUsata
  3845.  For Suono.b=0 To 31
  3846.   If Suono(Suono)\Canale=CanaleNota Then Pop For:Goto FineCicloForEsecutoreNote
  3847.  Next Suono
  3848. FineCicloForEsecutoreNote
  3849.  If Suono<32
  3850.   If Suono(Suono)\Canale>0
  3851.    Periodo.l=PeriFreq(Nota)\Periodo
  3852.    If Periodo>=#PeriodoMinimo AND Periodo<65536
  3853.     If VoceSpenta>0
  3854.      If VoceSpenta BitTst 0=True Then Voce.b=1:VoceSpenta BitClr 0:Goto SuonaCampione
  3855.      If VoceSpenta BitTst 1=True Then Voce=2:VoceSpenta BitClr 1:Goto SuonaCampione
  3856.      If VoceSpenta BitTst 2=True Then Voce=4:VoceSpenta BitClr 2:Goto SuonaCampione
  3857.      If VoceSpenta BitTst 3=True Then Voce=8:VoceSPenta BitClr 3
  3858.     EndIf
  3859. SuonaCampione
  3860.     SetPeriod Suono,Periodo:Sound Suono,Voce
  3861.     VoceUsata | Voce
  3862.     Messaggio$="Note>"+Str$(Nota)+" frequency>"+Str$(PeriFreq(Nota)\Frequenza)
  3863.     NoteSuonate+1
  3864.    EndIf
  3865.   EndIf
  3866.  Else
  3867.   If MIDIAttivato=True
  3868.    ByteDiStatoMIDI.b=#_NoteOn+(CanaleNota-1)
  3869.    WriteSerial 0,ByteDiStatoMIDI
  3870.    WriteSerial 0,Nota
  3871.    WriteSerial 0,VelocitaNota
  3872.    Messaggio$="Note>"+Str$(Nota)+" vel>"+Str$(VelocitaNota)
  3873.    NoteSuonate+1
  3874.   EndIf
  3875.  EndIf
  3876.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3877.   XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  3878.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3879.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3880.   WLocate XMessaggio,YMessaggio
  3881.   WColour CanaleNota-1,16-CanaleNota
  3882.   Print Messaggio$
  3883.  EndIf
  3884. End Statement
  3885.  
  3886. ;-----------------------------------------------
  3887. ;questa procedura esegue il cambio di programma
  3888. ;this procedure executes the program change
  3889. ;-------------------------------------------
  3890. Statement EseguiIlCambioDiProgramma{Programma.b,CanaleProgramma.b,Modo.b}
  3891. SHARED AltezzaInternaFinestraEditoreSequenza
  3892. SHARED MIDIAttivato
  3893.  If MIDIAttivato=True
  3894.   ByteDiStatoMIDI.b=#_ProgramChange+(CanaleProgramma-1)
  3895.   WriteSerial 0,ByteDiStatoMIDI
  3896.   WriteSerial 0,Programma
  3897.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3898.    XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  3899.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3900.    Messaggio$="Program>"+Str$(Programma)
  3901.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3902.    WLocate XMessaggio,YMessaggio
  3903.    WColour CanaleProgramma-1,16-CanaleProgramma
  3904.    Print Messaggio$
  3905.   EndIf
  3906.  EndIf
  3907. End Statement
  3908.  
  3909. ;-----------------------------------------------
  3910. ;questa procedura esegue il cambio di controllo
  3911. ;this procedure executes the control change
  3912. ;-------------------------------------------
  3913. Statement EseguiIlCambioDiControllo{Controllo.b,ValoreControllo,CanaleControllo.b,Modo.b}
  3914. SHARED AltezzaInternaFinestraEditoreSequenza
  3915. SHARED MIDIAttivato
  3916.  If MIDIAttivato=True
  3917.   ByteDiStatoMIDI.b=#_ControlChange+(CanaleControllo-1)
  3918.   WriteSerial 0,ByteDiStatoMIDI
  3919.   WriteSerial 0,Controllo
  3920.   WriteSerial 0,ValoreControllo
  3921.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3922.    XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  3923.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3924.    Messaggio$="Control>"+Str$(Controllo)+" val>"+Str$(ValoreControllo)
  3925.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3926.    WLocate XMessaggio,YMessaggio
  3927.    WColour CanaleControllo-1,16-CanaleControllo
  3928.    Print Messaggio$
  3929.   EndIf
  3930.  EndIf
  3931. End Statement
  3932.  
  3933. ;----------------------------------------------
  3934. ;questa procedura esegue la pressione multipla
  3935. ;this procedure executes the polyphonic pressure
  3936. ;------------------------------------------------
  3937. Statement EseguiLaPressioneMultipla{PressioneMultipla.b,CanalePressioneMultipla.b,Modo.b}
  3938. SHARED AltezzaInternaFinestraEditoreSequenza
  3939. SHARED MIDIAttivato
  3940.  If MIDIAttivato=True
  3941.   ByteDiStatoMIDI.b=#_PolyphonicKeyPressure+(CanalePressioneMultipla-1)
  3942.   WriteSerial 0,ByteDiStatoMIDI
  3943.   WriteSerial 0,PressioneMultipla
  3944.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3945.    XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  3946.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3947.    Messaggio$="Poly>"+Str$(PressioneMultipla)
  3948.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3949.    WLocate XMessaggio,YMessaggio
  3950.    WColour CanalePressioneMultipla-1,16-CanalePressioneMultipla
  3951.    Print Messaggio$
  3952.   EndIf
  3953.  EndIf
  3954. End Statement
  3955.  
  3956. ;---------------------------------------------
  3957. ;questa procedura esegue la pressione singola
  3958. ;this procedure executes the single pressure
  3959. ;--------------------------------------------
  3960. Statement EseguiLaPressioneSingola{PressioneSingola.b,CanalePressioneSingola.b,Modo.b}
  3961. SHARED AltezzaInternaFinestraEditoreSequenza
  3962. SHARED MIDIAttivato
  3963.  If MIDIAttivato=True
  3964.   ByteDiStatoMIDI.b=#_ChannelKeyPressure+(CanalePressioneSingola-1)
  3965.   WriteSerial 0,ByteDiStatoMIDI
  3966.   WriteSerial 0,PressioneMultipla
  3967.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3968.    XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  3969.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3970.    Messaggio$="Mono>"+Str$(PressioneMultipla)
  3971.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3972.    WLocate XMessaggio,YMessaggio
  3973.    WColour CanalePressioneSingola-1,16-CanalePressioneSingola
  3974.    Print Messaggio$
  3975.   EndIf
  3976.  EndIf
  3977. End Statement
  3978.  
  3979. ;-----------------------------------------------
  3980. ;questa procedura esegue la variazione di picco
  3981. ;this procedure executes the pitch bending
  3982. ;------------------------------------------
  3983. Statement EseguiLaCurvaDiPicco{CurvaDiPicco.w,CanaleCurvaDiPicco.b,Modo.b}
  3984. SHARED AltezzaInternaFinestraEditoreSequenza
  3985. SHARED MIDIAttivato
  3986.  If MIDIAttivato=True
  3987.   ByteDiStatoMIDI.b=#_PitchBend+(CanaleCurvaDiPicco-1)
  3988.   WriteSerial 0,ByteDiStatoMIDI
  3989.   WriteSerial 0,CurvaDiPicco MOD 128
  3990.   WriteSerial 0,CurvaDiPicco/128
  3991.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  3992.    XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  3993.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3994.    Messaggio$="Bend>"+Str$(CurvaDiPicco-#_PitchBendCenter)
  3995.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  3996.    WLocate XMessaggio,YMessaggio
  3997.    WColour CanaleCurvaDiPicco-1,16-CanaleCurvaDiPicco
  3998.    Print Messaggio$
  3999.   EndIf
  4000.  EndIf
  4001. End Statement
  4002.  
  4003. ;-----------------------------------------------------
  4004. ;questa procedura interrompe la nota suonata corrente
  4005. ;this procedure stops the current played note
  4006. ;---------------------------------------------
  4007. Statement SmettiDiSuonareLaNota{Nota.b,VelocitaNota.b,CanaleNota.b,Modo.b}
  4008. SHARED AltezzaInternaFinestraEditoreSequenza
  4009. SHARED MIDIAttivato
  4010. SHARED NoteSuonate
  4011. SHARED PeriFreq()
  4012. SHARED VoceSpenta
  4013. SHARED VoceUsata
  4014.  If VoceUsata>0
  4015.   If VoceUsata BitTst 0=True Then Voce.b=1:Goto FermaCampione
  4016.   If VoceUsata BitTst 1=True Then Voce=2:Goto FermaCampione
  4017.   If VoceUsata BitTst 2=True Then Voce=4:Goto FermaCampione
  4018.   If VoceUsata BitTst 3=True Then Voce=8
  4019. FermaCampione
  4020.   Quiet Voce
  4021.   VoceSpenta | Voce
  4022.   Messaggio$="Note>"+Str$(Nota)+" frequency>"+Str$(PeriFreq(Nota)\Frequenza)
  4023.   NoteSuonate-1
  4024.  Else
  4025.   If MIDIAttivato=True
  4026.    ByteDiStatoMIDI=#_NoteOff+(CanaleNota-1)
  4027.    WriteSerial 0,ByteDiStatoMIDI
  4028.    WriteSerial 0,Nota
  4029.    WriteSerial 0,VelocitaNota
  4030.    Messaggio$="Note>"+Str$(Nota)+" vel>"+Str$(VelocitaNota)
  4031.    NoteSuonate-1
  4032.   EndIf
  4033.  EndIf
  4034.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4035.   XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  4036.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4037.   Messaggio$+" stopped"
  4038.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  4039.   WLocate XMessaggio,YMessaggio
  4040.   WColour CanaleNota-1,16-CanaleNota
  4041.   Print Messaggio$
  4042.  EndIf
  4043. End Statement
  4044.  
  4045. ;---------------------------------------------------------
  4046. ;questa procedura mostra gli slider dell'editore sequenza
  4047. ;this procedure shows the sequence editor's sliders
  4048. ;---------------------------------------------------
  4049. Statement MostraSliderEditoreSequenza{}
  4050. SHARED AreaInvisibileDelleNote
  4051. SHARED AreaInvisibileDelTempo
  4052. SHARED DurataSequenza
  4053. SHARED LarghezzaInternaFinestraEditoreSequenza
  4054. SHARED XInizioAreaVisibile
  4055. SHARED YInizioAreaVisibile
  4056.  MostraSlider{1,YInizioAreaVisibile,AreaInvisibileDelleNote,"VERTICAL",#ListaGadgetEditoreSequenza,#FinestraEditoreSequenza}
  4057.  If AreaInvisibileDelTempo=0
  4058.   Disable #ListaGadgetEditoreSequenza,2
  4059.   XInizioAreaVisibile=0
  4060.  Else
  4061.   Enable #ListaGadgetEditoreSequenza,2
  4062.  EndIf
  4063.  MostraSlider{2,XInizioAreaVisibile,AreaInvisibileDelTempo,"HORIZONTAL",#ListaGadgetEditoreSequenza,#FinestraEditoreSequenza}
  4064. End Statement
  4065.  
  4066. ;-----------------------------------------------------------
  4067. ;questa procedura disegna le note di sfondo con i loro nomi
  4068. ;this procedure draws the notes background with note names
  4069. ;----------------------------------------------------------
  4070. Statement MostraLeNoteDiSfondoConILoroNomi{}
  4071. SHARED AreaInvisibileDelleNote
  4072. SHARED LarghezzaInternaFinestraEditoreSequenza
  4073. SHARED TipoDiNota()
  4074. SHARED YInizioAreaVisibile
  4075.  For Tasto.b=0 To 127-AreaInvisibileDelleNote
  4076.   Nota.b=127-Tasto-YInizioAreaVisibile
  4077.   Y0Nota.w=Tasto*8:Y1Nota.w=Y0Nota+7
  4078.   If TipoDiNota(Nota)\Diesis=True
  4079.    WBox 16,Y0Nota,LarghezzaInternaFinestraEditoreSequenza,Y1Nota,0
  4080.    WColour 3,0
  4081.   Else
  4082.    WBox 16,Y0Nota,LarghezzaInternaFinestraEditoreSequenza,Y1Nota,3
  4083.    WColour 0,3
  4084.   EndIf
  4085.   WLocate 16,Y0Nota
  4086.   Print "Note ",Nota,">"
  4087.   Print TipoDiNota(Nota)\NomeInglese
  4088.   Print "-"
  4089.   Print TipoDiNota(Nota)\NomeItaliano
  4090.   Print TipoDiNota(Nota)\Ottava
  4091.  Next Tasto
  4092. End Statement
  4093.  
  4094. ;-----------------------------------------------
  4095. ;questa procedura mostra i numeri delle battute
  4096. ;this procedure shows the bar numbers
  4097. ;-------------------------------------
  4098. Statement MostraLeBattute{}
  4099. SHARED AreaInvisibileDelleNote
  4100. SHARED Battiti
  4101. SHARED EventoMusicale()
  4102. SHARED LarghezzaInternaFinestraEditoreSequenza
  4103. SHARED Misure
  4104. SHARED ScalaEventiMusicali
  4105. SHARED SequenzaSelezionata
  4106. SHARED TipoDiNota()
  4107. SHARED XInizioAreaVisibile
  4108. SHARED YInizioAreaVisibile
  4109.  Nota.b=127-YInizioAreaVisibile-(127-AreaInvisibileDelleNote)
  4110.  Nota$=Str$(Nota):OttavaNota$=Str$(TipoDiNota(Nota)\Ottava):NomeIngleseNota$=TipoDiNota(Nota)\NomeInglese
  4111.  NomeItalianoNota$=TipoDiNota(Nota)\NomeItaliano
  4112.  LarghezzaTesto.w=Len("Note "+Nota$+">"+NomeIngleseNota$+"-"+NomeItalianoNota$+OttavaNota$+" ")*8
  4113.  FineTempo.l=XInizioAreaVisibile+(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  4114.  If TipoDiNota(Nota)\Diesis=True Then WColour 3,0 Else WColour 0,3
  4115.  Battito.b=1
  4116.  Misura.l=1
  4117.  Tempo.l=0
  4118.  Repeat
  4119.   PushItem EventoMusicale()
  4120.   ResetList EventoMusicale()
  4121.   While NextItem(EventoMusicale())=True
  4122.    If EventoMusicale()\Sequenza=SequenzaSelezionata AND EventoMusicale()\Inizio<=Tempo
  4123.     EventoMusicaleEseguito.b=EventoMusicale()\Stato & #EventoMusicaleEseguito
  4124.     If EventoMusicale()\Tipo="Tempo" AND EventoMusicaleEseguito=0
  4125.      NuoviBattiti.b=EventoMusicale()\Evento MOD 16+1
  4126.      NuoveMisure.b=EventoMusicale()\Evento/16+1
  4127.      If Battito>1
  4128.       Battito=1
  4129.       Misura+1
  4130.      EndIf
  4131.      TempoCambiato=True
  4132.      EventoMusicale()\Stato | #EventoMusicaleEseguito
  4133.     EndIf
  4134.    EndIf
  4135.   Wend
  4136.   PopItem EventoMusicale()
  4137.   XTempo.l=16+(Tempo-XInizioAreaVisibile)/ScalaEventiMusicali
  4138.   If XTempo>16+LarghezzaTesto-1
  4139.    WLocate XTempo,(127-AreaInvisibileDelleNote)*8
  4140.    Print Misura,".",Battito
  4141.    If TempoCambiato=True
  4142.     Tic.w=Tempo MOD (#TicDiBasePerQuarto/(NuoveMisure/4.0))
  4143.    Else
  4144.     Tic=Tempo MOD (#TicDiBasePerQuarto/(Misure/4.0))
  4145.    EndIf
  4146.    If Tic>0 Then Print ".",Tic
  4147.   EndIf
  4148.   Battute.b=Max(ScalaEventiMusicali/4,1)
  4149.   If TempoCambiato=True
  4150.    IncrementoTempo.w=(#TicDiBasePerQuarto*4.0*Battute)/NuoveMisure
  4151.   Else
  4152.    IncrementoTempo=(#TicDiBasePerQuarto*4.0*Battute)/Misure
  4153.   EndIf
  4154.   Battito+Battute
  4155.   Tempo+IncrementoTempo
  4156.   If TempoCambiato=True
  4157.    If Battito>NuoviBattiti Then Misura+Battito/NuoveMisure:Battito=1
  4158.   Else
  4159.    If Battito>Battiti Then Misura+Battito/Misure:Battito=1
  4160.   EndIf
  4161.  Until Tempo>FineTempo
  4162.  ResetList EventoMusicale()
  4163.  While NextItem(EventoMusicale())=True
  4164.   If EventoMusicale()\Tipo="Tempo"
  4165.    EventoMusicaleEseguito=EventoMusicale()\Stato & #EventoMusicaleEseguito
  4166.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  4167.     EventoMusicale()\Stato & %11110111
  4168.    EndIf
  4169.   EndIf
  4170.  Wend
  4171. End Statement
  4172.  
  4173. ;--------------------------------------------
  4174. ;questa procedura mostra gli eventi musicali
  4175. ;this procedure shows musical events
  4176. ;------------------------------------
  4177. Statement MostraGliEventiMusicali{}
  4178. SHARED CanaleSelezionato
  4179. SHARED EventoMusicale()
  4180. SHARED MostraSoloGliEventiMusicaliDelCanaleSelezionato
  4181. SHARED MostraSoloGliEventiMusicaliDelloStessoTipo
  4182. SHARED SequenzaSelezionata
  4183. SHARED TipoDiEventoMusicaleDiBase$
  4184.  ResetList EventoMusicale()
  4185.  While NextItem(EventoMusicale())=True
  4186.   If EventoMusicale()\Sequenza=SequenzaSelezionata
  4187.    TipoDiEventoMusicale$=EventoMusicale()\Tipo
  4188.    If TipoDiEventoMusicale$=TipoDiEventoMusicaleDiBase$ OR MostraSoloGliEventiMusicaliDelloStessoTipo=False
  4189.     CanaleEvento.b=EventoMusicale()\Canale
  4190.     If CanaleEvento=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  4191.      InizioEvento.l=EventoMusicale()\Inizio
  4192.      StatoEvento.b=EventoMusicale()\Stato
  4193.      Select TipoDiEventoMusicale$
  4194.      Case "Note"
  4195.       Nota.b=EventoMusicale()\Evento:DurataNota.l=EventoMusicale()\Durata
  4196.       DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataNota,CanaleEvento,StatoEvento}
  4197.      Case "Program"
  4198.       Programma.b=EventoMusicale()\Evento
  4199.       DisegnaUnEventoMusicale{"Program",Programma,InizioEvento,0,CanaleEvento,StatoEvento}
  4200.      Case "Control"
  4201.       Controllo.b=EventoMusicale()\Evento
  4202.       DisegnaUnEventoMusicale{"Control",Controllo,InizioEvento,0,CanaleEvento,StatoEvento}
  4203.      Case "PolyAftertouch"
  4204.       PressioneMultipla.b=EventoMusicale()\Evento
  4205.       DisegnaUnEventoMusicale{"PolyAftertouch",PressioneMultipla,InizioEvento,0,CanaleEvento,StatoEvento}
  4206.      Case "MonoAftertouch"
  4207.       PressioneSingola.b=EventoMusicale()\Evento
  4208.       DisegnaUnEventoMusicale{"MonoAftertouch",PressioneSingola,InizioEvento,0,CanaleEvento,StatoEvento}
  4209.      Case "PitchBend"
  4210.       CurvaDiPicco.w=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  4211.       DisegnaUnEventoMusicale{"PitchBend",CurvaDiPicco,InizioEvento,0,CanaleEvento,StatoEvento}
  4212.      Case "Tempo"
  4213.       Tempo.b=EventoMusicale()\Evento
  4214.       DisegnaUnEventoMusicale{"Tempo",Tempo,InizioEvento,0,CanaleEvento,StatoEvento}
  4215.      Case "BPM"
  4216.       BattutePerMinuto.w=EventoMusicale()\Evento*3+EventoMusicale()\Valore
  4217.       DisegnaUnEventoMusicale{"BPM",BattutePerMinuto,InizioEvento,0,CanaleEvento,StatoEvento}
  4218.      End Select
  4219.     EndIf
  4220.    EndIf
  4221.   EndIf
  4222.  Wend
  4223. End Statement
  4224.  
  4225. ;--------------------------------------------
  4226. ;questa procedura esegue gli eventi musicali
  4227. ;this procedure executes the musical events
  4228. ;-------------------------------------------
  4229. Statement EseguiGliEventiMusicali{Modo.b}
  4230. SHARED AltezzaInternaFinestraEditoreSequenza
  4231. SHARED BattutePerMinuto
  4232. SHARED CanaleSelezionato
  4233. SHARED DurataSequenza
  4234. SHARED EventoMusicale()
  4235. SHARED FineMotivo
  4236. SHARED LarghezzaInternaFinestraEditoreSequenza
  4237. SHARED MostraSoloGliEventiMusicaliDelCanaleSelezionato
  4238. SHARED ScalaEventiMusicali
  4239. SHARED Sequenza()
  4240. SHARED SequenzaSelezionata
  4241. SHARED TastoEsc$
  4242. SHARED XInizioAreaVisibile
  4243.  PushItem Sequenza()
  4244.  TicPerCinquantesimoDiSecondo.f=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  4245.  Tempo.l=0
  4246.  If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  4247.   FineEsecuzione.l=FineMotivo
  4248.  EndIf
  4249.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4250.   FineEsecuzione=DurataSequenza
  4251.   FineTempoVisibile.l=(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  4252.  EndIf
  4253.  Repeat
  4254.   EventoEsecutoreEventiMusicaliMusicali.l=Event
  4255.   Select EventoEsecutoreEventiMusicali
  4256.   Case #HaiChiusoLaFinestra
  4257.    Pop Repeat:Goto FineCicloRepeatEsecuzione
  4258.   Case #HaiPremutoUnTasto
  4259.    TastoPremuto$=Inkey$
  4260.   End Select
  4261.   ResetList EventoMusicale()
  4262.   While NextItem(EventoMusicale())
  4263.    SequenzaEventoMusicale.l=EventoMusicale()\Sequenza
  4264.    If SequenzaEventoMusicale=SequenzaSelezionata OR Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  4265.     If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  4266.      Sequenza.l=0
  4267.      ResetList Sequenza()
  4268.      While NextItem(Sequenza())=True
  4269.       Sequenza+1
  4270.       If Sequenza=SequenzaEventoMusicale
  4271.        Pop While:Goto FineCicloWhileEsecuzione
  4272.       EndIf
  4273.      Wend
  4274. FineCicloWhileEsecuzione
  4275.      InizioEventoMusicale.l=Sequenza()\Inizio+EventoMusicale()\Inizio
  4276.     EndIf
  4277.     If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4278.      InizioEventoMusicale=EventoMusicale()\Inizio
  4279.     EndIf
  4280.     TipoDiEventoMusicale$=EventoMusicale()\Tipo
  4281.     DurataEventoMusicale.l=EventoMusicale()\Durata
  4282.     FineEventoMusicale.l=InizioEventoMusicale+DurataEventoMusicale-1
  4283.     ValoreEventoMusicale.b=EventoMusicale()\Valore
  4284.     CanaleEventoMusicale.b=EventoMusicale()\Canale
  4285.     EventoMusicaleEseguito.b=EventoMusicale()\Stato & #EventoMusicaleEseguito
  4286.     EventoMusicaleTerminato.b=EventoMusicale()\Stato & #EventoMusicaleTerminato
  4287.     If EventoMusicaleEseguito=0 AND EventoMusicaleTerminato=0 AND Tempo>=InizioEventoMusicale
  4288.      If CanaleEventoMusicale<>CanaleSelezionato AND MostraSoloGliEventiMusicaliDelCanaleSelezionato=True
  4289.       If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza Then TipoDiEventoMusicale$=""
  4290.      EndIf
  4291.      If TipoDiEventoMusicale$<>""
  4292.       Select TipoDiEventoMusicale$
  4293.       Case "Note"
  4294.        Nota.b=EventoMusicale()\Evento
  4295.        VelocitaNota.b=ValoreEventoMusicale
  4296.        SuonaLaNota{Nota,VelocitaNota,CanaleEventoMusicale,Modo}
  4297.       Case "Program"
  4298.        Programma.b=EventoMusicale()\Evento
  4299.        EseguiIlCambioDiProgramma{Programma,CanaleEventoMusicale,Modo}
  4300.       Case "Control"
  4301.        Controllo.b=EventoMusicale()\Evento
  4302.        ValoreConttrollo.b=ValoreEventoMusicale
  4303.        EseguiIlCambioDiControllo{Controllo,ValoreControllo,CanaleEventoMusicale,Modo}
  4304.       Case "PolyAftertouch"
  4305.        PressioneMultipla.b=EventoMusicale()\Evento
  4306.        EseguiLaPressioneMultipla{PressionMultipla,CanaleEventoMusicale,Modo}
  4307.       Case "MonoAftertouch"
  4308.        PressioneSingola.b=EventoMusicale()\Evento
  4309.        EseguiLaPressioneSingola{PressioneSingola,CanaleEventoMusicale,Modo}
  4310.       Case "PitchBend"
  4311.        CurvaDiPicco.w=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  4312.        EseguiLaCurvaDiPicco{CurvaDiPicco,CanaleEventoMusicale,Modo}
  4313.       Case "Tempo"
  4314.        NuovoTempo.b=EventoMusicale()\Evento
  4315.        MostraIlTempo{NuovoTempo,CanaleEventoMusicale,Modo}
  4316.       Case "BPM"
  4317.        NuoveBattutePerMinuto.w=9+EventoMusicale()\Evento*3+EventoMusicale()\Valore
  4318.        TicPerCinquantesimoDiSecondo=(NuoveBattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  4319.        MostraLeBattutePerMinuto{NuoveBattutePerMinuto,CanaleEventoMusicale,Modo}
  4320.       End Select
  4321.       If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4322.        Evento.b=EventoMusicale()\Evento
  4323.        InizioEvento.l=InizioEventoMusicale
  4324.        DurataEvento.l=DurataEventoMusicale
  4325.        ValoreEvento.b=ValoreEventoMusicale
  4326.        CanaleEvento.b=CanaleEventoMusicale
  4327.        If TipoDiEventoMusicale$="PitchBend"
  4328.         CurvaDiPicco.w=Evento*128+ValoreEvento
  4329.       DisegnaUnEventoMusicale{TipoDiEventoMusicale$,CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleEseguito}
  4330.        Else
  4331.         DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleEseguito}
  4332.        EndIf
  4333.       EndIf
  4334.       EventoMusicale()\Stato | #EventoMusicaleEseguito
  4335.      EndIf
  4336.     EndIf
  4337.     If EventoMusicaleEseguito=#EventoMusicaleEseguito AND EventoMusicaleTerminato=0 AND Tempo>=FineEventoMusicale
  4338.      If CanaleEventoMusicale=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  4339.       If TipoDiEventoMusicale$<>""
  4340.        If TipoDiEventoMusicale$="Note"
  4341.         Nota=EventoMusicale()\Evento
  4342.         VelocitaNota=EventoMusicale()\Valore
  4343.         SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleEventoMusicale,Modo}
  4344.        EndIf
  4345.        If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4346.         Evento=EventoMusicale()\Evento
  4347.         ValoreEvento=EventoMusicale()\Valore
  4348.         InizioEvento=InizioEventoMusicale
  4349.         DurataEvento=DurataEventoMusicale
  4350.         CanaleEvento=CanaleEventoMusicale
  4351.         StatoOriginaleEvento.b=EventoMusicale()\Stato & %11110111
  4352.         If TipoDiEventoMusicale$="PitchBend"
  4353.          CurvaDiPicco.w=Evento*128+ValoreEvento
  4354.          DisegnaUnEventoMusicale{TipoDiEventoMusicale$,CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,StatoOriginaleEvento}
  4355.         Else
  4356.          DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,StatoOriginaleEvento}
  4357.         EndIf
  4358.        EndIf
  4359.        EventoMusicale()\Stato | #EventoMusicaleTerminato
  4360.       EndIf
  4361.      EndIf
  4362.     EndIf
  4363.    EndIf
  4364.   Wend
  4365.   VWait
  4366.   Tempo+TicPerCinquantesimoDiSecondo
  4367.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4368.    If Tempo-XInizioAreaVisibile>FineTempoVisibile
  4369.     XInizioAreaVisibile=Tempo
  4370.     MostraLeNoteDiSfondoConILoroNomi{}
  4371.     MostraLeBattute{}
  4372.     MostraGliEventiMusicali{}
  4373.     MostraSliderEditoreSequenza{}
  4374.    EndIf
  4375.   EndIf
  4376.  Until Tempo>=FineEsecuzione OR TastoPremuto$=TastoEsc$ OR TastoPremuto$=" "
  4377. FineCicloRepeatEsecuzione
  4378.  ResetList EventoMusicale()
  4379.  While NextItem(EventoMusicale())
  4380.   EventoMusicaleEseguito.b=EventoMusicale()\Stato & #EventoMusicaleEseguito
  4381.   If EventoMusicale()\Tipo="Note" AND EventoMusicaleEseguito=#EventoMusicaleEseguito
  4382.    Nota=EventoMusicale()\Evento
  4383.    VelocitaNota=EventoMusicale()\Valore
  4384.    CanaleNota.b=EventoMusicale()\Canale
  4385.    SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,Modo}
  4386.   EndIf
  4387.   EventoMusicale()\Stato & %11100111
  4388.  Wend
  4389.  PopItem Sequenza()
  4390.  Quiet %1111
  4391. End Statement
  4392.  
  4393. ;----------------------------------------------------------
  4394. ;questa procedura interrompe l'esecuzione di tutte le note
  4395. ;this procedure stops all notes execution
  4396. ;-----------------------------------------
  4397. Statement InterrompiTutteLeNote{Modo.b}
  4398. SHARED AltezzaInternaFinestraEditoreSequenza
  4399. SHARED MIDIAttivato
  4400.  If MIDIAttivato=True
  4401.   For CanaleNote.b=1 To 16
  4402.    EseguiIlCambioDiControllo{#_AllNotesOff,127,CanaleNota,Modo}
  4403.    EseguiIlCambioDiControllo{#_ResetCtrl,127,CanaleNota,Modo}
  4404.   Next CanaleNote
  4405.  EndIf
  4406.  Quiet %1111
  4407.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4408.   XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  4409.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4410.   Messaggio$="All notes off"
  4411.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  4412.   WLocate XMessaggio,YMessaggio
  4413.   WColour 1,0
  4414.   Print Messaggio$
  4415.  EndIf
  4416. End Statement
  4417.  
  4418. Statement AggiungiUnaNotaDallaTastiera{Nota$}
  4419. SHARED AreaInvisibileDelleNote
  4420. SHARED CanaleSelezionato
  4421. SHARED DurataSequenza
  4422. SHARED EventiMusicali
  4423. SHARED EventoMusicale()
  4424. SHARED LarghezzaEventoBase
  4425. SHARED NotaSuonata
  4426. SHARED OttavaSelezionata
  4427. SHARED PuntoDInserimento
  4428. SHARED SequenzaSelezionata
  4429. SHARED ValoreEventoBase
  4430.  Select Nota$
  4431.  Case "C1"
  4432.   Nota.b=0
  4433.  Case "C#1"
  4434.   Nota=1
  4435.  Case "D1"
  4436.   Nota=2
  4437.  Case "D#1"
  4438.   Nota=3
  4439.  Case "E1"
  4440.   Nota=4
  4441.  Case "F1"
  4442.   Nota=5
  4443.  Case "F#1"
  4444.   Nota=6
  4445.  Case "G1"
  4446.   Nota=7
  4447.  Case "G#1"
  4448.   Nota=8
  4449.  Case "A1"
  4450.   Nota=9
  4451.  Case "A#1"
  4452.   Nota=10
  4453.  Case "B1"
  4454.   Nota=11
  4455.  Case "C2"
  4456.   Nota=12
  4457.  Case "C#2"
  4458.   Nota=13
  4459.  Case "D2"
  4460.   Nota=14
  4461.  Case "D#2"
  4462.   Nota=15
  4463.  Case "E2"
  4464.   Nota=16
  4465.  Case "F2"
  4466.   Nota=17
  4467.  Case "F#2"
  4468.   Nota=18
  4469.  Case "G2"
  4470.   Nota=19
  4471.  Case "G#2"
  4472.   Nota=20
  4473.  Case "A2"
  4474.   Nota=21
  4475.  Case "A#2"
  4476.   Nota=22
  4477.  Case "B2"
  4478.   Nota=23
  4479.  End Select
  4480.  Nota+OttavaSelezionata*12:Nota=Min(Nota,127)
  4481.  If CanaleSelezionato>0
  4482.   LastItem EventoMusicale()
  4483.   If AddItem(EventoMusicale())=True
  4484.    EventiMusicali+1
  4485.    EventoMusicale()\Tipo="Note"
  4486.    EventoMusicale()\Evento=Nota
  4487.    EventoMusicale()\Valore=ValoreEventoBase
  4488.    EventoMusicale()\Inizio=PuntoDInserimento
  4489.    EventoMusicale()\Canale=CanaleSelezionato
  4490.    EventoMusicale()\Sequenza=SequenzaSelezionata
  4491.    EventoMusicale()\Stato=#EventoMusicaleNonSelezionato
  4492.    EventoMusicale()\Durata=LarghezzaEventoBase
  4493.    If NotaSuonata\Stato=True
  4494.     Nota.b=NotaSuonata\Evento
  4495.     VelocitaNota.b=NotaSuonata\Valore
  4496.     CanaleNota.b=NotaSuonata\Canale
  4497.     SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,#EseguiGliEventiMusicaliDallEditoreSequenza}
  4498.    EndIf
  4499.    NotaSuonata\Evento=EventoMusicale()\Evento,EventoMusicale()\Valore,EventoMusicale()\Inizio,EventoMusicale()\Durata
  4500.    NotaSuonata\Canale=EventoMusicale()\Canale
  4501.    SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiMusicaliDallEditoreSequenza}
  4502.    NotaSuonata\Stato=True
  4503.    PuntoDInserimento+LarghezzaEventoBase
  4504.    DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  4505.   Else
  4506.    EZRequest "AmySequencer message","You have used all the available events","OK"
  4507.   EndIf
  4508.  Else
  4509.   EZRequest "AmySequencer message","You must select a channel first","OK"
  4510.  EndIf
  4511. End Statement
  4512.  
  4513. ;-------------------------------------------------------
  4514. ;questa procedura imposta il menu dell'editore sequenza
  4515. ;this procedure sets the sequence editor menu
  4516. ;---------------------------------------------
  4517. Statement ImpostaMenuEditoreSequenza{}
  4518. SHARED MostraSoloGliEventiMusicaliDelloStessoTipo
  4519. SHARED MostraNuovoValore
  4520. SHARED TipoDiEventoMusicaleDiBase$
  4521.  
  4522.  Free MenuList #ListaMenuEditoreSequenza
  4523.  
  4524.  MenuTitle #ListaMenuEditoreSequenza,0,"Controls"
  4525.  MenuItem #ListaMenuEditoreSequenza,0,0,0,"Play"
  4526.  MenuItem #ListaMenuEditoreSequenza,0,0,1,"Record"
  4527.  
  4528.  MenuTitle #ListaMenuEditoreSequenza,1,"Edit"
  4529.  MenuItem #ListaMenuEditoreSequenza,0,1,0,"All"
  4530.  MenuItem #ListaMenuEditoreSequenza,0,1,1,"None"
  4531.  MenuItem #ListaMenuEditoreSequenza,0,1,2,"Toggle"
  4532.  MenuItem #ListaMenuEditoreSequenza,0,1,3,"Cut"
  4533.  MenuItem #ListaMenuEditoreSequenza,0,1,4,"Copy"
  4534.  MenuItem #ListaMenuEditoreSequenza,0,1,5,"Paste"
  4535.  MenuItem #ListaMenuEditoreSequenza,0,1,6,"Forget"
  4536.  MenuItem #ListaMenuEditoreSequenza,0,1,7,"Goto"
  4537.  
  4538.  MenuTitle #ListaMenuEditoreSequenza,2,"Event type"
  4539.  Select TipoDiEventoMusicaleDiBase$
  4540.  Case "Note"
  4541.   MenuItem #ListaMenuEditoreSequenza,4,2,0,"  Note"
  4542.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4543.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4544.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4545.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4546.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4547.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4548.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4549.  Case "Program"
  4550.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4551.   MenuItem #ListaMenuEditoreSequenza,4,2,1,"  Program"
  4552.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4553.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4554.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4555.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4556.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4557.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4558.  Case "Control"
  4559.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4560.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4561.   MenuItem #ListaMenuEditoreSequenza,4,2,2,"  Control"
  4562.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4563.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4564.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4565.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4566.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4567.  Case "PolyAftertouch"
  4568.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4569.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4570.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4571.   MenuItem #ListaMenuEditoreSequenza,4,2,3,"  PolyPressure"
  4572.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4573.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4574.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4575.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4576.  Case "MonoAftertouch"
  4577.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4578.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4579.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4580.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4581.   MenuItem #ListaMenuEditoreSequenza,4,2,4,"  MonoPressure"
  4582.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4583.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4584.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4585.  Case "PitchBend"
  4586.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4587.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4588.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4589.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4590.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4591.   MenuItem #ListaMenuEditoreSequenza,4,2,5,"  PitchBend"
  4592.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4593.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4594.  Case "Tempo"
  4595.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4596.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4597.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4598.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4599.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4600.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4601.   MenuItem #ListaMenuEditoreSequenza,4,2,6,"  Tempo"
  4602.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4603.  Case "BPM"
  4604.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4605.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4606.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4607.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4608.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4609.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4610.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4611.   MenuItem #ListaMenuEditoreSequenza,4,2,7,"  BPM"
  4612.  End Select
  4613.  If MostraSoloGliEventiMusicaliDelloStessoTipo=True
  4614.   MenuItem #ListaMenuEditoreSequenza,3,2,8,"  Alone"
  4615.  Else
  4616.   MenuItem #ListaMenuEditoreSequenza,1,2,8,"  Alone"
  4617.  EndIf
  4618.  
  4619.  MenuTitle #ListaMenuEditoreSequenza,3,"Settings"
  4620.  MenuItem #ListaMenuEditoreSequenza,0,3,0,"Basic event"
  4621.  If MostraNuovoValore=True
  4622.   MenuItem #ListaMenuEditoreSequenza,3,3,1,"  Show dragged event value"
  4623.  Else
  4624.   MenuItem #ListaMenuEditoreSequenza,1,3,1,"  Show dragged event value"
  4625.  EndIf
  4626.  
  4627.  MenuTitle #ListaMenuEditoreSequenza,4,"Help"
  4628.  MenuItem #ListaMenuEditoreSequenza,0,4,0,"Keys to use"
  4629.  MenuItem #ListaMenuEditoreSequenza,0,4,1,"Notes on keys"
  4630.  
  4631. ;-------------------------------
  4632. ;attacca il menu' alla finestra
  4633. ;attaches menu to window
  4634. ;------------------------
  4635.  SetMenu #ListaMenuEditoreSequenza
  4636.  
  4637. End Statement
  4638.  
  4639. ;------------------------------------------------------------
  4640. ;questa procedura selezione e/o modifica gli eventi musicali
  4641. ;this procedure selectes and/or modifies the musical events
  4642. ;-----------------------------------------------------------
  4643. Statement Selezione{Modo.b}
  4644. SHARED AltezzaInternaFinestraEditoreSequenza
  4645. SHARED AreaVisibileDeiValori
  4646. SHARED Battiti
  4647. SHARED CanaleSelezionato
  4648. SHARED ColoriOriginali
  4649. SHARED DurataSequenza
  4650. SHARED EventiMusicali
  4651. SHARED EventiMusicaliSelezionati
  4652. SHARED EventoMusicale()
  4653. SHARED EventoMusicaleSelezionato
  4654. SHARED EventoMusicaleSpostatoConIlTopo
  4655. SHARED LarghezzaInternaFinestraEditoreSequenza
  4656. SHARED LarghezzaEventoBase
  4657. SHARED MIDIAttivato
  4658. SHARED Misure
  4659. SHARED MostraSoloGliEventiMusicaliDelCanaleSelezionato
  4660. SHARED MostraSoloGliEventiMusicaliDelloStessoTipo
  4661. SHARED NotaSuonata
  4662. SHARED PeriFreq()
  4663. SHARED PuntoDInserimento
  4664. SHARED ScalaEventiMusicali
  4665. SHARED SequenzaSelezionata
  4666. SHARED Suono()
  4667. SHARED TastoDelTopoCliccato
  4668. SHARED TipoDiEventoMusicaleDiBase$
  4669. SHARED ValoreEventoBase
  4670. SHARED XInizioAreaVisibile
  4671. SHARED XTopo
  4672. SHARED YInizioAreaVisibile
  4673. SHARED YTopo
  4674.  ResetList EventoMusicale()
  4675.  StessoEvento.b=%00000
  4676.  XTopo=Min(Max(XTopo,16),LarghezzaInternaFinestraEditoreSequenza-1)
  4677.  While NextItem(EventoMusicale())=True
  4678.   StessoEvento=%00000
  4679.   TipoDiEventoMusicale$=EventoMusicale()\Tipo
  4680.   If TipoDiEventoMusicale$=TipoDiEventoMusicaleDiBase$ OR MostraSoloGliEventiMusicaliDelloStessoTipo=False
  4681.    CanaleEvento.b=EventoMusicale()\Canale
  4682.    If CanaleEvento=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  4683.     InizioEvento.l=EventoMusicale()\Inizio
  4684.     SequenzaEvento.w=EventoMusicale()\Sequenza
  4685.     SelezioneEventoMusicale.b=EventoMusicale()\Stato & #EventoMusicaleSelezionato
  4686.     EventoMusicaleTagliato.b=EventoMusicale()\Stato & #EventoMusicaleTagliato
  4687.     EventoMusicaleCopiato.b=EventoMusicale()\Stato & #EventoMusicaleCopiato
  4688.     If Modo=#SelezionaUnEventoMusicale
  4689.      Select TipoDiEventoMusicale$
  4690.      Case "Note"
  4691.       YTopo=Min(Max(YTopo,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  4692.       Nota.b=EventoMusicale()\Evento
  4693.       DurataNota.l=EventoMusicale()\Durata
  4694.       FineNota.l=InizioEvento+DurataNota-1
  4695.       VelocitaNota.b=EventoMusicale()\Valore
  4696.       XPosizioneNota.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  4697.       YPosizioneNota.b=127-YInizioAreaVisibile-YTopo/8
  4698.       If XPosizioneNota>=InizioEvento Then StessoEvento | %00001
  4699.       If XPosizioneNota<=FineNota Then StessoEvento | %00010
  4700.       If YPosizioneNota=Nota Then StessoEvento | %00100
  4701.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4702.       If StessoEvento=%01111
  4703.        If CanaleSelezionato<>CanaleEvento
  4704.         If CanaleSelezionato=0
  4705.          CanaleSelezionato=CanaleEvento
  4706.          Format "00"
  4707.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4708.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  4709.          Print Str$(CanaleSelezionato)
  4710.          Format ""
  4711.          StessoEvento | %10000
  4712.         Else
  4713.          AggiungiEvento.b=EZRequest("AmySequencer message","Would you add a new note|with the current channel?","Yes|No")
  4714.          If AggiungiEvento=1
  4715.           CanaleEvento=CanaleSelezionato
  4716.          Else
  4717.           Format "00"
  4718.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4719.           If ColoriOriginali=True
  4720.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4721.           Else
  4722.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4723.           EndIf
  4724.           Print Str$(CanaleSelezionato)
  4725.           CanaleSelezionato=CanaleEvento
  4726.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4727.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  4728.           Print Str$(CanaleSelezionato)
  4729.           Format ""
  4730.           StessoEvento | %10000
  4731.          EndIf
  4732.         EndIf
  4733.        Else
  4734.         TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  4735.         ImpostaMenuEditoreSequenza{}
  4736.         StessoEvento | %10000
  4737.        EndIf
  4738.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4739.         If TastoDelTopoCliccato=#TastoSinistroPremutoDelTopo
  4740.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneNota,YPosizioneNota}
  4741.         EndIf
  4742.         If EventoMusicaleSpostatoConIlTopo=False
  4743.          EventiMusicaliSelezionati-1
  4744.          EventoMusicale()\Stato & %11111110
  4745.         Else
  4746.          Nota=EventoMusicale()\Evento
  4747.          InizioNota=EventoMusicale()\Inizio
  4748.         EndIf
  4749.        Else
  4750.         NotaPiuLunga.l=DurataNota
  4751.         EventiMusicaliSelezionati+1
  4752.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4753.        EndIf
  4754.        NotaSuonata\Evento=Nota,VelocitaNota,0,DurataNota,CanaleEvento
  4755.        SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiMusicaliDallEditoreSequenza}
  4756.        NotaSuonata\Stato=True
  4757.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  4758.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  4759.       EndIf
  4760.      Case "Program"
  4761.       YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4762.       Programma.b=EventoMusicale()\Evento
  4763.       LunghezzaEvento.w=Len("Program000")*8
  4764.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  4765.       FineProgramma.w=InizioEvento+LunghezzaEvento-1
  4766.       XPosizioneProgramma.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  4767.       YPosizioneProgramma.b=127-YTopo*127/AreaVisibileDeiValori
  4768.       If XPosizioneProgramma>=InizioEvento Then StessoEvento | %00001
  4769.       If XPosizioneProgramma<=FineProgramma Then StessoEvento | %00010
  4770.       If YPosizioneProgramma=Programma Then StessoEvento | %00100
  4771.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4772.       If StessoEvento=%01111
  4773.        If CanaleSelezionato<>CanaleEvento
  4774.         If CanaleSelezionato=0
  4775.          CanaleSelezionato=CanaleEvento
  4776.          Format "00"
  4777.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4778.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  4779.          Print Str$(CanaleSelezionato)
  4780.          Format ""
  4781.          StessoEvento | %10000
  4782.         Else
  4783.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new program|with the current channel?","Yes|No")
  4784.          If AggiungiEvento=1
  4785.           CanaleEvento=CanaleSelezionato
  4786.          Else
  4787.           Format "00"
  4788.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4789.           If ColoriOriginali=True
  4790.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4791.           Else
  4792.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4793.           EndIf
  4794.           Print Str$(CanaleSelezionato)
  4795.           CanaleSelezionato=CanaleEvento
  4796.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4797.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  4798.           Print Str$(CanaleSelezionato)
  4799.           Format ""
  4800.           StessoEvento | %10000
  4801.          EndIf
  4802.         EndIf
  4803.        Else
  4804.         TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  4805.         ImpostaMenuEditoreSequenza{}
  4806.         StessoEvento | %10000
  4807.        EndIf
  4808.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4809.         If TastoDelTopoCliccato=#TastoSinistroPremutoDelTopo
  4810.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneProgramma,YPosizioneProgramma}
  4811.         EndIf
  4812.         If EventoMusicaleSpostatoConIlTopo=False
  4813.          EventiMusicaliSelezionati-1
  4814.          EventoMusicale()\Stato & %11111110
  4815.         EndIf
  4816.        Else
  4817.         EventiMusicaliSelezionati+1
  4818.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4819.        EndIf
  4820.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  4821.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  4822.       EndIf
  4823.      Case "Control"
  4824.       YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4825.       Controllo.b=EventoMusicale()\Evento
  4826.       LunghezzaEvento.w=Len("Control000")*8
  4827.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  4828.       FineControllo.w=InizioEvento+LunghezzaEvento-1
  4829.       XPosizioneControllo.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  4830.       YPosizioneControllo.b=127-YTopo*127/AreaVisibileDeiValori
  4831.       If XPosizioneControllo>=InizioEvento Then StessoEvento | %00001
  4832.       If XPosizioneControllo<=FineControllo Then StessoEvento | %00010
  4833.       If YPosizioneControllo=Controllo Then StessoEvento | %00100
  4834.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4835.       If StessoEvento=%01111
  4836.        If CanaleSelezionato<>CanaleEvento
  4837.         If CanaleSelezionato=0
  4838.          CanaleSelezionato=CanaleEvento
  4839.          Format "00"
  4840.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4841.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  4842.          Print Str$(CanaleSelezionato)
  4843.          Format ""
  4844.          StessoEvento | %10000
  4845.         Else
  4846.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new control|with the current channel?","Yes|No")
  4847.          If AggiungiEvento=1
  4848.           CanaleEvento=CanaleSelezionato
  4849.          Else
  4850.           Format "00"
  4851.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4852.           If ColoriOriginali=True
  4853.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4854.           Else
  4855.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4856.           EndIf
  4857.           Print Str$(CanaleSelezionato)
  4858.           CanaleSelezionato=CanaleEvento
  4859.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4860.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  4861.           Print Str$(CanaleSelezionato)
  4862.           Format ""
  4863.           StessoEvento | %10000
  4864.          EndIf
  4865.         EndIf
  4866.        Else
  4867.         TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  4868.         ImpostaMenuEditoreSequenza{}
  4869.         StessoEvento | %10000
  4870.        EndIf
  4871.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4872.         If TastoDelTopoCliccato=#TastoSinistroPremutoDelTopo
  4873.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneControllo,YPosizioneControllo}
  4874.         EndIf
  4875.         If EventoMusicaleSpostatoConIlTopo=False
  4876.          EventiMusicaliSelezionati-1
  4877.          EventoMusicale()\Stato & %11111110
  4878.         EndIf
  4879.        Else
  4880.         EventiMusicaliSelezionati+1
  4881.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4882.        EndIf
  4883.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  4884.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  4885.       EndIf
  4886.      Case "PolyAftertouch"
  4887.       YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4888.       PressioneMultipla.b=EventoMusicale()\Evento
  4889.       LunghezzaEvento.w=Len("Poly000")*8
  4890.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  4891.       FinePressioneMultipla.w=InizioEvento+LunghezzaEvento-1
  4892.       XPosizionePressioneMultipla.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  4893.       YPosizionePressioneMultipla.b=127-YTopo*127/AreaVisibileDeiValori
  4894.       If XPosizionePressioneMultipla>=InizioEvento Then StessoEvento | %00001
  4895.       If XPosizionePressioneMultipla<=FinePressioneMultipla Then StessoEvento | %00010
  4896.       If YPosizionePressioneMultipla=PressioneMultipla Then StessoEvento | %00100
  4897.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4898.       If StessoEvento=%01111
  4899.        If CanaleSelezionato<>CanaleEvento
  4900.         If CanaleSelezionato=0
  4901.          CanaleSelezionato=CanaleEvento
  4902.          Format "00"
  4903.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4904.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  4905.          Print Str$(CanaleSelezionato)
  4906.          Format ""
  4907.          StessoEvento | %10000
  4908.         Else
  4909.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new poly|pressure with the current channel?","Yes|No")
  4910.          If AggiungiEvento=1
  4911.           CanaleEvento=CanaleSelezionato
  4912.          Else
  4913.           Format "00"
  4914.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4915.           If ColoriOriginali=True
  4916.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4917.           Else
  4918.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4919.           EndIf
  4920.           Print Str$(CanaleSelezionato)
  4921.           CanaleSelezionato=CanaleEvento
  4922.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4923.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  4924.           Print Str$(CanaleSelezionato)
  4925.           Format ""
  4926.           StessoEvento | %10000
  4927.          EndIf
  4928.         EndIf
  4929.        Else
  4930.         TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  4931.         ImpostaMenuEditoreSequenza{}
  4932.         StessoEvento | %10000
  4933.        EndIf
  4934.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4935.         If TastoDelTopoCliccato=#TastoSinistroPremutoDelTopo
  4936.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizionePressioneMultipla,YPosizionePressioneMultipla}
  4937.         EndIf
  4938.         If EventoMusicaleSpostatoConIlTopo=False
  4939.          EventiMusicaliSelezionati-1
  4940.          EventoMusicale()\Stato & %11111110
  4941.         EndIf
  4942.        Else
  4943.         EventiMusicaliSelezionati+1
  4944.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  4945.        EndIf
  4946.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  4947.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  4948.       EndIf
  4949.      Case "MonoAftertouch"
  4950.       YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  4951.       PressioneSingola.b=EventoMusicale()\Evento
  4952.       LunghezzaEvento.w=Len("Mono000")*8
  4953.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  4954.       FinePressioneSingola.w=InizioEvento+LunghezzaEvento-1
  4955.       XPosizionePressioneSingola.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  4956.       YPosizionePressioneSingola.b=127-YTopo*127/AreaVisibileDeiValori
  4957.       If XPosizionePressioneSingola>=InizioEvento Then StessoEvento | %00001
  4958.       If XPosizionePressioneSingola<=FinePressioneSingola Then StessoEvento | %00010
  4959.       If YPosizionePressioneSingola=PressioneSingola Then StessoEvento | %00100
  4960.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4961.       If StessoEvento=%01111
  4962.        If CanaleSelezionato<>CanaleEvento
  4963.         If CanaleSelezionato=0
  4964.          CanaleSelezionato=CanaleEvento
  4965.          Format "00"
  4966.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4967.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  4968.          Print Str$(CanaleSelezionato)
  4969.          Format ""
  4970.          StessoEvento | %10000
  4971.         Else
  4972.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new mono|pressure with the current channel?","Yes|No")
  4973.          If AggiungiEvento=1
  4974.           CanaleEvento=CanaleSelezionato
  4975.          Else
  4976.           Format "00"
  4977.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4978.           If ColoriOriginali=True
  4979.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4980.           Else
  4981.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4982.           EndIf
  4983.           Print Str$(CanaleSelezionato)
  4984.           CanaleSelezionato=CanaleEvento
  4985.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4986.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  4987.           Print Str$(CanaleSelezionato)
  4988.           Format ""
  4989.           StessoEvento | %10000
  4990.          EndIf
  4991.         EndIf
  4992.        Else
  4993.         TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  4994.         ImpostaMenuEditoreSequenza{}
  4995.         StessoEvento | %10000
  4996.        EndIf
  4997.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4998.         If TastoDelTopoCliccato=#TastoSinistroPremutoDelTopo
  4999.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizionePressioneSingola,YPosizionePressioneSingola}
  5000.         EndIf
  5001.         If EventoMusicaleSpostatoConIlTopo=False
  5002.          EventiMusicaliSelezionati-1
  5003.          EventoMusicale()\Stato & %11111110
  5004.         EndIf
  5005.        Else
  5006.         EventiMusicaliSelezionati+1
  5007.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5008.        EndIf
  5009.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5010.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5011.       EndIf
  5012.      Case "PitchBend"
  5013.       YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  5014.       CurvaDiPicco.b=EventoMusicale()\Evento
  5015.       LunghezzaEvento.w=Len("Bend+0000")*8
  5016.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  5017.       FineCurvaDiPicco.w=InizioEvento+LunghezzaEvento-1
  5018.       XPosizioneCurvaDiPicco.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  5019.       YPosizioneCurvaDiPicco.b=127-YTopo*127/AreaVisibileDeiValori
  5020.       If XPosizioneCurvaDiPicco>=InizioEvento Then StessoEvento | %00001
  5021.       If XPosizioneCurvaDiPicco<=FineCurvaDiPicco Then StessoEvento | %00010
  5022.       If YPosizioneCurvaDiPicco=CurvaDiPicco Then StessoEvento | %00100
  5023.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  5024.       If StessoEvento=%01111
  5025.        If CanaleSelezionato<>CanaleEvento
  5026.         If CanaleSelezionato=0
  5027.          CanaleSelezionato=CanaleEvento
  5028.          Format "00"
  5029.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5030.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  5031.          Print Str$(CanaleSelezionato)
  5032.          Format ""
  5033.          StessoEvento | %10000
  5034.         Else
  5035.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new pitch bend|with the current channel?","Yes|No")
  5036.          If AggiungiEvento=1
  5037.           CanaleEvento=CanaleSelezionato
  5038.          Else
  5039.           Format "00"
  5040.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5041.           If ColoriOriginali=True
  5042.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5043.           Else
  5044.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5045.           EndIf
  5046.           Print Str$(CanaleSelezionato)
  5047.           CanaleSelezionato=CanaleEvento
  5048.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5049.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  5050.           Print Str$(CanaleSelezionato)
  5051.           Format ""
  5052.           StessoEvento | %10000
  5053.          EndIf
  5054.         EndIf
  5055.        Else
  5056.         TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5057.         ImpostaMenuEditoreSequenza{}
  5058.         StessoEvento | %10000
  5059.        EndIf
  5060.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5061.         If TastoDelTopoCliccato=#TastoSinistroPremutoDelTopo
  5062.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneCurvaDiPicco,YPosizioneCurvaDiPicco}
  5063.         EndIf
  5064.         If EventoMusicaleSpostatoConIlTopo=False
  5065.          EventiMusicaliSelezionati-1
  5066.          EventoMusicale()\Stato & %11111110
  5067.         EndIf
  5068.        Else
  5069.         EventiMusicaliSelezionati+1
  5070.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5071.        EndIf
  5072.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5073.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5074.       EndIf
  5075.      Case "Tempo"
  5076.       YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  5077.       Tempo.b=EventoMusicale()\Evento
  5078.       LunghezzaEvento.w=Len("Tempo00/00")*8
  5079.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  5080.       FineTempo.w=InizioEvento+LunghezzaEvento-1
  5081.       XPosizioneTempo.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  5082.       YPosizioneTempo.b=127-YTopo*127/AreaVisibileDeiValori
  5083.       If XPosizioneTempo>=InizioEvento Then StessoEvento | %00001
  5084.       If XPosizioneTempo<=FineTempo Then StessoEvento | %00010
  5085.       If YPosizioneTempo=Tempo Then StessoEvento | %00100
  5086.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  5087.       If StessoEvento=%01111
  5088.        If CanaleSelezionato<>CanaleEvento
  5089.         If CanaleSelezionato=0
  5090.          CanaleSelezionato=CanaleEvento
  5091.          Format "00"
  5092.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5093.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  5094.          Print Str$(CanaleSelezionato)
  5095.          Format ""
  5096.          StessoEvento | %10000
  5097.         Else
  5098.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new tempo|with the current channel?","Yes|No")
  5099.          If AggiungiEvento=1
  5100.           CanaleEvento=CanaleSelezionato
  5101.          Else
  5102.           Format "00"
  5103.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5104.           If ColoriOriginali=True
  5105.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5106.           Else
  5107.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5108.           EndIf
  5109.           Print Str$(CanaleSelezionato)
  5110.           CanaleSelezionato=CanaleEvento
  5111.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5112.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  5113.           Print Str$(CanaleSelezionato)
  5114.           Format ""
  5115.           StessoEvento | %10000
  5116.          EndIf
  5117.         EndIf
  5118.        Else
  5119.         TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5120.         ImpostaMenuEditoreSequenza{}
  5121.         StessoEvento | %10000
  5122.        EndIf
  5123.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5124.         If TastoDelTopoCliccato=#TastoSinistroPremutoDelTopo
  5125.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneTempo,YPosizioneTempo}
  5126.         EndIf
  5127.         If EventoMusicaleSpostatoConIlTopo=False
  5128.          EventiMusicaliSelezionati-1
  5129.          EventoMusicale()\Stato & %11111110
  5130.         EndIf
  5131.        Else
  5132.         EventiMusicaliSelezionati+1
  5133.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5134.        EndIf
  5135.        EventoMusicaleSelezionato=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  5136.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5137.       EndIf
  5138.      Case "BPM"
  5139.       YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  5140.       BattutePerMinuto.b=EventoMusicale()\Evento
  5141.       LunghezzaLunghezzaEvento.w=Len("BPM000")*8
  5142.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  5143.       FineBattutePerMinuto.w=InizioEvento+LunghezzaEvento-1
  5144.       XPosizioneBattutePerMinuto.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  5145.       YPosizioneBattutePerMinuto.b=97-YTopo*97/AreaVisibileDeiValori
  5146.       If XPosizioneBattutePerMinuto>=InizioEvento Then StessoEvento | %00001
  5147.       If XPosizioneBattutePerMinuto<=FineBattutePerMinuto Then StessoEvento | %00010
  5148.       If YPosizioneBattutePerMinuto=BattutePerMinuto Then StessoEvento | %00100
  5149.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  5150.       If StessoEvento=%01111
  5151.        If CanaleSelezionato<>CanaleEvento
  5152.         If CanaleSelezionato=0
  5153.          CanaleSelezionato=CanaleEvento
  5154.          Format "00"
  5155.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5156.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  5157.          Print Str$(CanaleSelezionato)
  5158.          Format ""
  5159.          StessoEvento | %10000
  5160.         Else
  5161.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new BPM|with the current channel?","Yes|No")
  5162.          If AggiungiEvento=1
  5163.           CanaleEvento=CanaleSelezionato
  5164.          Else
  5165.           Format "00"
  5166.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5167.           If ColoriOriginali=True
  5168.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5169.           Else
  5170.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5171.           EndIf
  5172.           Print Str$(CanaleSelezionato)
  5173.           CanaleSelezionato=CanaleEvento
  5174.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5175.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  5176.           Print Str$(CanaleSelezionato)
  5177.           Format ""
  5178.           StessoEvento | %10000
  5179.          EndIf
  5180.         EndIf
  5181.        Else
  5182.         TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5183.         ImpostaMenuEditoreSequenza{}
  5184.         StessoEvento | %10000
  5185.        EndIf
  5186.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5187.         If TastoDelTopoCliccato=#TastoSinistroPremutoDelTopo
  5188.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneBattutePerMinuto,YPosizioneBattutePerMinuto}
  5189.         EndIf
  5190.         If EventoMusicaleSpostatoConIlTopo=False
  5191.          EventiMusicaliSelezionati-1
  5192.          EventoMusicale()\Stato & %11111110
  5193.         EndIf
  5194.        Else
  5195.         EventiMusicaliSelezionati+1
  5196.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5197.        EndIf
  5198.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5199.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5200.       EndIf
  5201.      End Select
  5202.     Else
  5203.      If EventoMusicale()\Sequenza=SequenzaSelezionata
  5204.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5205.        Select Modo
  5206.        Case #CambiaIlCanaleDegliEventiMusicaliSelezionati
  5207.         EventoMusicale()\Canale=CanaleSelezionato
  5208.        Case #AlzaDiUnoGliEventiMusicaliSelezionati
  5209.         If TipoDiEventoMusicale$="BPM"
  5210.          If EventoMusicale()\Evento<97
  5211.           EventoMusicale()\Valore+1
  5212.           If EventoMusicale()\Valore>2
  5213.            EventoMusicale()\Valore=0:EventoMusicale()\Evento+1
  5214.           EndIf
  5215.          EndIf
  5216.         Else
  5217.          If EventoMusicale()\Evento<127 Then EventoMusicale()\Evento+1
  5218.         EndIf
  5219.        Case #AbbassaDiUnoGliEventiMusicaliSelezionati
  5220.         If TipoDiEventoMusicale$="BPM"
  5221.          If EventoMusicale()\Evento>0
  5222.           EventoMusicale()\Valore-1
  5223.           If EventoMusicale()\Valore<0
  5224.            EventoMusicale()\Valore=2:EventoMusicale()\Evento-1
  5225.           EndIf
  5226.          Else
  5227.           If EventoMusicale()\Valore>1 Then EventoMusicale()\Valore-1
  5228.          EndIf
  5229.         Else
  5230.          If EventoMusicale()\Evento>0 Then EventoMusicale()\Evento-1
  5231.        EndIf
  5232.        Case #SpostaAvantiNelTempoGliEventiMusicaliSelezionati
  5233.         EventoMusicale()\Inizio+LarghezzaEventoBase
  5234.        Case #SpostaIndietroNelTempoGliEventiMusicaliSelezionati
  5235.         EventoMusicale()\Inizio-LarghezzaEventoBase:If EventoMusicale()\Inizio<0 Then EventoMusicale()\Inizio=0
  5236.        Case #EliminaGliEventiMusicaliSelezionati
  5237.         EventiMusicaliSelezionati-1
  5238.         DurataEventoMusicale.l=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  5239.         KillItem EventoMusicale():EventiMusicali-1
  5240.         If EventiMusicali=0 Then DurataSequenza=0
  5241.        Case #DeselezionaTuttiGliEventiMusicali
  5242.         EventiMusicaliSelezionati-1
  5243.         EventoMusicale()\Stato & %11111110
  5244.        Case #InvertiLaSelezioneDiTuttiGliEventiMusicali
  5245.         EventiMusicaliSelezionati-1
  5246.         EventoMusicale()\Stato & %11111110
  5247.        Case #TagliaGliEventiMusicaliSelezionati
  5248.         EventoMusicale()\Stato | #EventoMusicaleTagliato
  5249.        Case #CopiaGliEventiMusicaliSelezionati
  5250.         EventoMusicale()\Stato | #EventoMusicaleCopiato
  5251.        End Select
  5252.        Select TipoDiEventoMusicale$
  5253.        Case "Note"
  5254.         Select Modo
  5255.         Case #AllungaLaDurataDelleNoteSelezionate
  5256.          If EventoMusicale()\Durata=#_MClksPerSP
  5257.           EventoMusicale()\Durata=LarghezzaEventoBase
  5258.          Else
  5259.           EventoMusicale()\Durata+LarghezzaEventoBase
  5260.          EndIf
  5261.          NotaPiuLunga=Max(NotaPiuLunga,EventoMusicale()\Durata)
  5262.          DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  5263.         Case #RiduciLaDurataDelleNoteSelezionate
  5264.          EventoMusicale()\Durata-LarghezzaEventoBase
  5265.          EventoMusicale()\Durata=Max(EventoMusicale()\Durata,#_MClksPerSP)
  5266.          NotaPiuLunga=Max(EventoMusicale()\Durata,NotaPiuLunga)
  5267.         Case #AlzaDiUnOttavaLeNoteSelezionate
  5268.          EventoMusicale()\Evento+12
  5269.          EventoMusicale()\Evento=Min(EventoMusicale()\Evento,127)
  5270.         Case #AbbassaDiUnOttavaLeNoteSelezionate
  5271.          EventoMusicale()\Evento-12
  5272.          EventoMusicale()\Evento=Max(EventoMusicale()\Evento,0)
  5273.         Case #CambiaIlValoreDegliEventiMusicaliSelezionati
  5274.          EventoMusicale()\Valore=ValoreEventoBase
  5275.         End Select
  5276.        Case "Tempo"
  5277.         NuoviBattiti.b=EventoMusicale()\Evento MOD 16+1
  5278.         NuoveMisure.b=EventoMusicale()\Evento/16+1
  5279.         Select Modo
  5280.         Case #AggiungiUnBattitoAlTempoSelezionato
  5281.          NuoviBattiti+1
  5282.          NuoviBattiti=Min(NuoviBattiti,16)
  5283.         Case #TogliUnBattitoAlTempoSelezionato
  5284.          NuoviBattiti-1
  5285.          NuoviBattiti=Max(NuoviBattiti,1)
  5286.         Case #AggiungiUnaMisuraAlTempoSelezionato
  5287.          NuoveMisure+1
  5288.          NuoveMisure=Min(NuoveMisure,8)
  5289.         Case #TogliUnaMisuraAlTempoSelezionato
  5290.          NuoveMisure-1
  5291.          NuoveMisure=Max(NuoveMisure,1)
  5292.         End Select
  5293.         EventoMusicale()\Evento=(NuoveMisure-1)*16+NuoviBattiti-1
  5294.        Case "BPM"
  5295.         Select Modo
  5296.         Case #AggiungiDieciAgliEventiMusicaliSelezionati
  5297.          If EventoMusicale()\Evento<94
  5298.           EventoMusicale()\Evento+3
  5299.           EventoMusicale()\Valore+1
  5300.           If EventoMusicale()\Valore>2
  5301.            EventoMusicale()\Valore=0:EventoMusicale()\Evento+1
  5302.           EndIf
  5303.          EndIf
  5304.         Case #SottraiDieciAgliEventiMusicaliSelezionati
  5305.          If EventoMusicale()\Evento>3
  5306.           EventoMusicale()\Evento-3:EventoMusicale()\Valore-1
  5307.           If EventoMusicale()\Valore<0
  5308.            EventoMusicale()\Evento-1:EventoMusicale()\Valore=2
  5309.           EndIf
  5310.          Else
  5311.           If EventoMusicale()\Evento>2 AND EventoMusicale()\Valore>1
  5312.            EventoMusicale()\Evento-3:EventoMusicale()\Valore-1
  5313.           EndIf
  5314.          EndIf
  5315.         End Select
  5316.        Default
  5317.         Select Modo
  5318.         Case #AggiungiDieciAgliEventiMusicaliSelezionati
  5319.          EventoMusicale()\Evento+10
  5320.          EventoMusicale()\Evento=Min(EventoMusicale()\Evento,127)
  5321.         Case #SottraiDieciAgliEventiMusicaliSelezionati
  5322.          EventoMusicale()\Evento-10
  5323.          EventoMusicale()\Evento=Max(EventoMusicale()\Evento,0)
  5324.         End Select
  5325.        End Select
  5326.       Else
  5327.        Select Modo
  5328.        Case #SelezionaTuttiGliEventiMusicali
  5329.         EventiMusicaliSelezionati+1
  5330.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5331.        Case #InvertiLaSelezioneDiTuttiGliEventiMusicali
  5332.         EventiMusicaliSelezionati+1
  5333.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5334.        End Select
  5335.       EndIf
  5336.       If Modo=#IncollaGliEventiMusicali AND EventoMusicaleTagliato=#EventoMusicaleTagliato
  5337.        EventoMusicale()\Inizio+PuntoDInserimento
  5338.        EventoMusicale()\Stato & %11111101
  5339.        EventoMusicale()\Stato & #EventoMusicaleCopiato
  5340.       EndIf
  5341.      EndIf
  5342.     EndIf
  5343.    EndIf
  5344.   EndIf
  5345.  Wend
  5346. FineCicloWhileSelezione
  5347.  If Modo=#SelezionaUnEventoMusicale AND StessoEvento<%11111
  5348.   If CanaleSelezionato>0
  5349.    LastItem EventoMusicale()
  5350.    If AddItem(EventoMusicale())=True
  5351.     EventiMusicali+1
  5352.     EventoMusicale()\Inizio=(XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  5353.     EventoMusicale()\Canale=CanaleSelezionato
  5354.     EventoMusicale()\Sequenza=SequenzaSelezionata
  5355.     EventoMusicale()\Stato=0
  5356.     EventoMusicale()\Tipo=TipoDiEventoMusicaleDiBase$
  5357.     Select TipoDiEventoMusicaleDiBase$
  5358.     Case "Note"
  5359.      YTopo=Min(Max(YTopo,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  5360.      EventoMusicale()\Evento=127-YInizioAreaVisibile-YTopo/8
  5361.      EventoMusicale()\Valore=ValoreEventoBase
  5362.      EventoMusicale()\Durata=LarghezzaEventoBase
  5363.      NotaSuonata\Evento=EventoMusicale()\Evento,EventoMusicale()\Valore,0,EventoMusicale()\Durata,EventoMusicale()\Canale
  5364.      SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiMusicaliDallEditoreSequenza}
  5365.      NotaSuonata\Stato=True
  5366.     Case "Program"
  5367.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  5368.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  5369.      EventoMusicale()\Evento=Min(EventoMusicale()\Evento,98)
  5370.      EventoMusicale()\Durata=2
  5371.     Case "Control"
  5372.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  5373.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  5374.      EventoMusicale()\Durata=2
  5375.      EventoMusicale()\Valore=ValoreEventoBase
  5376.     Case "PolyAftertouch"
  5377.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  5378.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  5379.      EventoMusicale()\Durata=2
  5380.     Case "MonoAftertouch"
  5381.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  5382.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  5383.      EventoMusicale()\Durata=2
  5384.     Case "PitchBend"
  5385.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  5386.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  5387.      EventoMusicale()\Durata=2
  5388.     Case "Tempo"
  5389.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  5390.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  5391.      EventoMusicale()\Durata=2
  5392.     Case "BPM"
  5393.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  5394.      EventoMusicale()\Evento=97-YTopo*97/AreaVisibileDeiValori
  5395.      If EventoMusicale()\Evento=97 Then EventoMusicale()\Valore=0
  5396.      If EventoMusicale()\Evento=0 Then EventoMusicale()\Valore=1
  5397.      EventoMusicale()\Durata=2
  5398.     End Select
  5399.     If TipoDiEventoMusicaleDiBase$="PitchBend"
  5400.      EventoMusicaleSelezionato=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  5401.     Else
  5402.      EventoMusicaleSelezionato=EventoMusicale()\Evento
  5403.     EndIf
  5404.     DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+Max(EventoMusicale()\Durata,LarghezzaEventoBase))
  5405.    Else
  5406.     EZRequest "AmySequencer message","You have used all the available events","OK"
  5407.    EndIf
  5408.   Else
  5409.    EZRequest "AmySequencer message","You must select a channel first","OK"
  5410.   EndIf
  5411.  EndIf
  5412.  If Modo=#IncollaGliEventiMusicali
  5413.   If CanaleSelezionato>0
  5414.    ResetList EventoMusicale()
  5415.    While NextItem(EventoMusicale())=True
  5416.     SequenzaEvento=EventoMusicale()\Sequenza
  5417.     If SequenzaEvento=SequenzaSelezionata
  5418.      TipoDiEventoMusicale$=EventoMusicale()\Tipo
  5419.      If TipoDiEventoMusicale$=TipoDiEventoMusicaleDiBase$ OR MostraSoloGliEventiMusicaliDelloStessoTipo=False
  5420.       CanaleEvento=EventoMusicale()\Canale
  5421.       If CanaleEvento=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  5422.        EventoMusicaleCopiato=EventoMusicale()\Stato & #EventoMusicaleCopiato
  5423.        If EventoMusicaleCopiato=#EventoMusicaleCopiato
  5424.         EventoMusicale=EventoMusicale()\Evento
  5425.         ValoreEvento.b=EventoMusicale()\Valore
  5426.         InizioEvento=EventoMusicale()\Inizio
  5427.         DurataEvento.l=EventoMusicale()\Durata
  5428.         If DifferenzaPosizioneEventoMusicale.l=0 Then DifferenzaPosizioneEventoMusicale=PuntoDInserimento-InizioEvento
  5429.         PushItem EventoMusicale()
  5430.         LastItem EventoMusicale()
  5431.         If AddItem(EventoMusicale())=True
  5432.          EventiMusicali+1
  5433.          EventiMusicaliSelezionati+1
  5434.          EventoMusicale()\Tipo=TipoDiEventoMusicale$
  5435.          EventoMusicale()\Evento=EventoMusicale
  5436.          EventoMusicale()\Valore=ValoreEvento
  5437.          EventoMusicale()\Inizio=InizioEvento+DifferenzaPosizioneEventoMusicale
  5438.          EventoMusicale()\Durata=DurataEvento
  5439.          EventoMusicale()\Canale=CanaleSelezionato
  5440.          EventoMusicale()\Sequenza=SequenzaSelezionata
  5441.          EventoMusicale()\Stato=#EventoMusicaleSelezionato
  5442.          DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+Max(EventoMusicale()\Durata,LarghezzaEventoBase))
  5443.         Else
  5444.          EZRequest "AmySequencer message","You have used all the available events","OK"
  5445.         EndIf
  5446.         PopItem EventoMusicale()
  5447.        EndIf
  5448.       EndIf
  5449.      EndIf
  5450.     EndIf
  5451.    Wend
  5452.   Else
  5453.    EZRequest "AmySequencer message","You must select a channel first","OK"
  5454.   EndIf
  5455.  EndIf
  5456.  If Modo=#DimenticaGliEventiMusicaliTagliatiOCopiati
  5457.   If CanaleSelezionato>0
  5458.    ResetList EventoMusicale()
  5459.    While NextItem(EventoMusicale())=True
  5460.     SequenzaEvento=EventoMusicale()\Sequenza
  5461.     If SequenzaEvento=SequenzaSelezionata
  5462.      TipoDiEventoMusicale$=EventoMusicale()\Tipo
  5463.      If TipoDiEventoMusicale$=TipoDiEventoMusicaleDiBase$ OR MostraSoloGliEventiMusicaliDelloStessoTipo=False
  5464.       CanaleEvento=EventoMusicale()\Canale
  5465.       If CanaleEvento=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  5466.        EventoMusicaleCopiato=EventoMusicale()\Stato & #EventoMusicaleCopiato
  5467.        If EventoMusicaleCopiato=#EventoMusicaleCopiato
  5468.         EventoMusicale()\Stato & %11111001
  5469.        EndIf
  5470.       EndIf
  5471.      EndIf
  5472.     EndIf
  5473.    Wend
  5474.   Else
  5475.    EZRequest "AmySequencer message","You must select a channel first","OK"
  5476.   EndIf
  5477.  EndIf
  5478.  If Modo=#SelezionaGliEventiMusicaliUguali
  5479.   ResetList EventoMusicale()
  5480.   While NextItem(EventoMusicale())=True
  5481.    If  EventoMusicale()\Canale=CanaleSelezionato AND EventoMusicale()\Sequenza=SequenzaSelezionata
  5482.     If EventoMusicale()\Tipo="PitchBend"
  5483.      If EventoMusicale()\Evento*128+EventoMusicale()\Valore=EventoMusicaleSelezionato
  5484.       If EventoMusicale()\Stato & #EventoMusicaleSelezionato=0
  5485.        EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5486.        EventiMusicaliSelezionati+1
  5487.       EndIf
  5488.      EndIf
  5489.     Else
  5490.      If EventoMusicale()\Evento=EventoMusicaleSelezionato
  5491.       If EventoMusicale()\Stato & #EventoMusicaleSelezionato=0
  5492.        EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5493.        EventiMusicaliSelezionati+1
  5494.       EndIf
  5495.      EndIf
  5496.     EndIf
  5497.    EndIf
  5498.   Wend
  5499.  EndIf
  5500.  If NotaPiuLunga>0
  5501.   XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  5502.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  5503.   WLocate XMessaggio,YMessaggio
  5504.   WColour 3,2
  5505.   Print SPACE$(80-XMessaggio/8)
  5506.   WLocate XMessaggio,YMessaggio
  5507.   Print "Len>":ConvertiIlTempoInBattute{NotaPiuLunga,Battiti,Misure,True}
  5508.  EndIf
  5509.  DurataSequenza=0
  5510.  ResetList EventoMusicale()
  5511.  While NextItem(EventoMusicale())=True
  5512.   If EventoMusicale()\Sequenza=SequenzaSelezionata
  5513.    DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  5514.   EndIf
  5515.  Wend
  5516.  LimiteMassimoXInizioAreaVisibile.l=Max(DurataSequenza-(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali,0)
  5517.  XInizioAreaVisibile=Min(XInizioAreaVisibile,LimiteMassimoXInizioAreaVisibile)
  5518. End Statement
  5519.  
  5520. ;-------------------------------------------------------------------------
  5521. ;questa procedura gestisce il titolo della finestra dell'editore sequenza
  5522. ;this procedure handles the sequence editor window title
  5523. ;--------------------------------------------------------
  5524. Statement MostraIlTitoloDellaFinestraDellEditoreSequenza{}
  5525. SHARED EventiMusicali
  5526. SHARED EventiMusicaliSelezionati
  5527. SHARED Sequenza()
  5528. SHARED SequenzaSelezionata
  5529.  TitoloFinestra$="Sequence "+Str$(SequenzaSelezionata)+":"
  5530.  NomeSequenza$=Sequenza()\Nome
  5531.  If NomeSequenza$="" Then NomeSequenza$="unnamed"
  5532.  TitoloFinestra$+NomeSequenza$+"-"
  5533.  If EventiMusicali>0
  5534.   TitoloFinestra$+Str$(EventiMusicaliSelezionati)+" selected event"
  5535.   If EventiMusicaliSelezionati<>1 Then TitoloFinestra$+"s"
  5536.   TitoloFinestra$+" of "+Str$(EventiMusicali)+" event"
  5537.   If EventiMusicali<>1 Then TitoloFinestra$+"s"
  5538.  Else
  5539.   TitoloFinestra$+"no events into this sequence"
  5540.  EndIf
  5541.  WTitle TitoloFinestra$
  5542. End Statement
  5543.  
  5544. ;----------------------------------------------
  5545. ;questa procedura registra gli eventi musicali
  5546. ;this procedure records the musical events
  5547. ;------------------------------------------
  5548. Statement RegistraGliEventiMusicali{Modo.b}
  5549. SHARED AltezzaInternaFinestraEditoreSequenza
  5550. SHARED Battiti
  5551. SHARED BattutePerMinuto
  5552. SHARED DurataSequenza
  5553. SHARED EventiMusicali
  5554. SHARED EventoMusicale()
  5555. SHARED LarghezzaInternaFinestraEditoreSequenza
  5556. SHARED Misure
  5557. SHARED ScalaEventiMusicali
  5558. SHARED Sequenza()
  5559. SHARED SequenzaSelezionata
  5560. SHARED TastoCursoreGiu$
  5561. SHARED TastoCursoreSu$
  5562. SHARED TastoEsc$
  5563. SHARED XInizioAreaVisibile
  5564.  If SequenzaSelezionata>0
  5565.   Messaggio$="Begin recording?|If you'll choose|OK use CURSOR KEYS|UP & DOWN to change|BPM and press SPACE|to end recording"
  5566.   Registrazione.b=EZRequest("AmySequencer message",Messaggio$,"OK|Cancel")
  5567.   If Registrazione=0 Then Statement Return
  5568.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5569.    FineTempoVisibile.l=(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  5570.   EndIf
  5571.   Battito.b=Misure
  5572.   TicPerCinquantesimoDiSecondo.f=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  5573.   Tempo.l=0
  5574.   Repeat
  5575.    EventoRegistratoreEventiMusicali.l=Event
  5576.    Select EventoRegistratoreEventiMusicali
  5577.    Case #HaiChiusoLaFinestra
  5578.     Pop Select:Pop Repeat:Statement Return
  5579.    Case #HaiPremutoUnTasto
  5580.     TastoPremuto$=Inkey$
  5581.     Select TastoPremuto$
  5582.     Case TastoCursoreSu$
  5583.      If BattutePerMinuto<300
  5584.       BattutePerMinuto+1
  5585.       TicPerCinquantesimoDiSecondo=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  5586.       MostraLeBattutePerMinuto{BattutePerMinuto,10,Modo}
  5587.      EndIf
  5588.     Case TastoCursoreGiu$
  5589.      If BattutePerMinuto>10
  5590.       BattutePerMinuto-1
  5591.       TicPerCinquantesimoDiSecondo=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  5592.       MostraLeBattutePerMinuto{BattutePerMinuto,10,Modo}
  5593.      EndIf
  5594.     End Select
  5595.    End Select
  5596.    ByteDiStato.b=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5597.    TipoDiEventoMusicale.b=ByteDiStato & #_StatusBits
  5598.    CanaleEvento.b=ConvertiOltreCentoventisetteInNegativo{ByteDiStato & #_ChannelBits}+1
  5599.    Select TipoDiEventoMusicale
  5600.    Case #_NoteOn
  5601.     TipoDiEventoMusicale$="Note"
  5602.     Evento.b=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5603.     ValoreEvento.b=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5604.    Case #_NoteOff
  5605.     TipoDiEventoMusicale$="NoteOff"
  5606.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5607.     ValoreEvento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5608.    Case #_ProgramChange
  5609.     TipoDiEventoMusicale$="Program"
  5610.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5611.    Case #_ControlChange
  5612.     TipoDiEventoMusicale$="Control"
  5613.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5614.     ValoreEvento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5615.    Case #_PolyphonicKeyPressure
  5616.     TipoDiEventoMusicale$="PolyAftertouch"
  5617.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5618.    Case #_ChannelKeyPressure
  5619.     TipoDiEventoMusicale$="MonoAftertouch"
  5620.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5621.    Case #_PitchBend
  5622.     TipoDiEventoMusicale$="PitchBend"
  5623.     ValoreEvento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5624.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5625.    Default
  5626.     TipoDiEventoMusicale$=""
  5627.    End Select
  5628.    If TipoDiEventoMusicale$<>""
  5629.     If TipoDiEventoMusicale$<>"NoteOff"
  5630.      LastItem EventoMusicale()
  5631.      If AddItem(EventoMusicale())=True
  5632.       EventoMusicale()\Tipo=TipoDiEventoMusicale$
  5633.       EventoMusicale()\Evento=Evento
  5634.       EventoMusicale()\Inizio=Tempo
  5635.       EventoMusicale()\Canale=CanaleEvento
  5636.       EventoMusicale()\Sequenza=SequenzaSelezionata
  5637.       EventoMusicale()\Durata=2
  5638.       If TipoDiEventoMusicale$="Note" Then EventoMusicale()\Valore=ValoreEvento
  5639.       If TipoDiEventoMusicale$="Control" Then EventoMusicale()\Valore=ValoreEvento
  5640.       If TipoDiEventoMusicale$="PitchBend" Then EventoMusicale()\Valore=ValoreEvento
  5641.       Select TipoDiEventoMusicale$
  5642.       Case "Note"
  5643.        Nota.b=EventoMusicale()\Evento
  5644.        SuonaLaNota{Nota,ValoreEvento,CanaleEvento,Modo}
  5645.       Case "Program"
  5646.        Programma.b=EventoMusicale()\Evento
  5647.        EseguiIlCambioDiProgramma{Programma,CanaleEvento,Modo}
  5648.       Case "Control"
  5649.        Controllo.b=EventoMusicale()\Evento:ValoreEvento=EventoMusicale()\Valore
  5650.        EseguiIlCambioDiControllo{Controllo,ValoreEvento,CanaleEvento,Modo}
  5651.       Case "PolyAftertouch"
  5652.        PressioneMultipla.b=EventoMusicale()\Evento
  5653.        EseguiLaPressioneMultipla{PressioneMultipla,CanaleEvento,Modo}
  5654.       Case "MonoAftertouch"
  5655.        PressioneSingola.b=EventoMusicale()\Evento
  5656.        EseguiLaPressioneSingola{PressioneSingola,CanaleEvento,Modo}
  5657.       Case "PitchBend"
  5658.        CurvaDiPicco.w=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  5659.        EseguiLaCurvaDiPicco{CurvaDiPicco,CanaleEvento,Modo}
  5660.       End Select
  5661.       EventoMusicale()\Stato | #EventoMusicaleEseguito
  5662.       If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  5663.       Sequenza()\EventiMusicali+1
  5664.       EndIf
  5665.       If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5666.        EventiMusicali+1:MostraIlTitoloDellaFinestraDellEditoreSequenza{}
  5667.       EndIf
  5668.      Else
  5669.       EZRequest "AmySequencer message","You have used all the available events","OK"
  5670.       Statement Return
  5671.      EndIf
  5672.     Else
  5673.      SmettiDiSuonareLaNota{Evento,ValoreEvento,CanaleEvento,Modo}
  5674.      EventoMusicale()\Stato & %11110111
  5675.      EventoMusicale()\Stato | #EventoMusicaleTerminato
  5676.     EndIf
  5677.    EndIf
  5678.    VWait
  5679.    Tempo+TicPerCinquantesimoDiSecondo
  5680.    If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  5681.     Sequenza()\Durata=Tempo-Sequenza()\Inizio+1
  5682.    EndIf
  5683.    If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5684.     If Tempo-XInizioAreaVisibile>FineTempoVisibile
  5685.      XInizioAreaVisibile=Tempo
  5686.      MostraLeNoteDiSfondoConILoroNomi{}
  5687.      MostraLeBattute{}
  5688.      MostraSliderEditoreSequenza{}
  5689.     EndIf
  5690.     Sequenza()\Durata=Tempo+1
  5691.     DurataSequenza=Tempo+1
  5692.    EndIf
  5693.    TempoMetronomo.w+TicPerCinquantesimoDiSecondo
  5694.    If TempoMetronomo>=(#TicDiBasePerQuarto*1.0*Battiti)/Misure
  5695.     If NotaMetronomoSuonata.b=True
  5696.      SmettiDiSuonareLaNota{76,0,10,Modo}
  5697.      TempoMetronomo=0
  5698.      NotaMetronomoSuonata=False
  5699.     Else
  5700.      SuonaLaNota{76,(127.0*Battito)/Misure,10,Modo}
  5701.      Battito-1:If Battito=0 Then Battito=Misure
  5702.      NotaMetronomoSuonata=True
  5703.     EndIf
  5704.    EndIf
  5705.    ResetList EventoMusicale()
  5706.    While NextItem(EventoMusicale())=True
  5707.     TipoDiEventoMusicale$=EventoMusicale()\Tipo
  5708.     Evento=EventoMusicale()\Evento
  5709.     ValoreEvento=EventoMusicale()\Valore
  5710.     InizioEvento.l=EventoMusicale()\Inizio
  5711.     DurataEvento.l=EventoMusicale()\Durata
  5712.     CanaleEvento=EventoMusicale()\Canale
  5713.     StatoEvento.b=EventoMusicale()\Stato
  5714.     EventoMusicaleEseguito.b=StatoEvento & #EventoMusicaleEseguito
  5715.     If EventoMusicaleEseguito=#EventoMusicaleEseguito
  5716.      If TipoDiEventoMusicale$="Note" Then EventoMusicale()\Durata=Tempo-InizioEvento+1
  5717.      If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5718.       If TipoDiEventoMusicale$="PitchBend"
  5719.        CurvaDiPicco.w=Evento*128+ValoreEvento
  5720.       DisegnaUnEventoMusicale{TipoDiEventoMusicale$,CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleEseguito}
  5721.       Else
  5722.        DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleEseguito}
  5723.       EndIf
  5724.      EndIf
  5725.      If InizioEvento+DurataEvento-1>=Tempo
  5726.       EventoMusicale()\Stato & %11110111
  5727.       EventoMusicale()\Stato | #EventoMusicaleTerminato
  5728.      EndIf
  5729.     EndIf
  5730.     EventoMusicaleTerminato.b=StatoEvento & #EventoMusicaleTerminato
  5731.     If EventoMusicaleTerminato=#EventoMusicaleTerminato
  5732.      If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5733.       If TipoDiEventoMusicale$="PitchBend"
  5734.        CurvaDiPicco=Evento*128+ValoreEvento
  5735.        DisegnaUnEventoMusicale{TipoDiEventoMusicale$,CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,StatoEvento}
  5736.       Else
  5737.        DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,StatoEvento}
  5738.       EndIf
  5739.      EndIf
  5740.      EventoMusicale()\Stato & %11101111
  5741.     EndIf
  5742.    Wend
  5743.   Until TastoPremuto$=TastoEsc$ OR TastoPremuto$=" "
  5744.   If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  5745.    Sequenza()\Durata=Tempo-Sequenza()\Inizio+1
  5746.   EndIf
  5747.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5748.    DurataSequenza=Tempo+1
  5749.   EndIf
  5750.   ResetList EventoMusicale()
  5751.   While NextItem(EventoMusicale())=True
  5752.    EventoMusicale()\Stato & %11100111
  5753.   Wend
  5754.  Else
  5755.   EZRequest "AmySequencer message","You must select a sequence first","OK"
  5756.  EndIf
  5757. End Statement
  5758.  
  5759. ;-----------------------------------------------
  5760. ;questa procedura mostra il punto d'inserimento
  5761. ;this procedure shows the insertion point
  5762. ;-----------------------------------------
  5763. Statement MostraIlPuntoDInserimento{}
  5764. SHARED AltezzaInternaFinestraEditoreSequenza
  5765. SHARED CanaleSelezionato
  5766. SHARED LarghezzaInternaFinestraEditoreSequenza
  5767. SHARED PuntoDInserimento
  5768. SHARED ScalaEventiMusicali
  5769. SHARED XInizioAreaVisibile
  5770.  I.w=16+(PuntoDInserimento-XInizioAreaVisibile)/ScalaEventiMusicali
  5771.  If I>=16 AND I+7<LarghezzaInternaFinestraEditoreSequenza
  5772.   If CanaleSelezionato>0
  5773.    ColoreTestoPuntoDInserimento=CanaleSelezionato-1
  5774.    ColoreSfondoPuntoDInserimento=16-CanaleSelezionato
  5775.   Else
  5776.    ColoreTestoPuntoDInserimento=3
  5777.   EndIf
  5778.   WBox I,0,I+7,AltezzaInternaFinestraEditoreSequenza-8-8,ColoreSfondoPuntoDInserimento
  5779.   TestoPuntoDInserimento$="Insertion point>"
  5780.   For TestoPuntoDInserimento.b=0 To 15
  5781.    WLocate I,TestoPuntoDInserimento*8
  5782.    WColour ColoreTestoPuntoDInserimento,ColoreSfondoPuntoDInserimento
  5783.    Print Mid$(TestoPuntoDInserimento$,TestoPuntoDInserimento+1,1)
  5784.   Next TestoPuntoDInserimento
  5785.  EndIf
  5786. End Statement
  5787.  
  5788. ;-------------------------------------------------------------
  5789. ;questa procedura permette di editare la sequenza selezionata
  5790. ;this procedure permits to edit the selected sequence
  5791. ;-----------------------------------------------------
  5792. Statement EditoreSequenza{}
  5793. SHARED AltezzaFonte
  5794. SHARED AltezzaInternaFinestraEditoreSequenza
  5795. SHARED AltezzaSchermo
  5796. SHARED AreaInvisibileDelleNote
  5797. SHARED AreaInvisibileDelTempo
  5798. SHARED AreaVisibileDeiValori
  5799. SHARED Battiti
  5800. SHARED CanaleSelezionato
  5801. SHARED ColoriOriginali
  5802. SHARED DurataSequenza
  5803. SHARED EventiMusicali
  5804. SHARED EventiMusicaliSelezionati
  5805. SHARED EventoMusicale()
  5806. SHARED LarghezzaInternaFinestraEditoreSequenza
  5807. SHARED LarghezzaEventoBase
  5808. SHARED LarghezzaSchermo
  5809. SHARED MIDIAttivato
  5810. SHARED Misure
  5811. SHARED MostraSoloGliEventiMusicaliDelloStessoTipo
  5812. SHARED MostraSoloGliEventiMusicaliDelCanaleSelezionato
  5813. SHARED MostraNuovoValore
  5814. SHARED NotaSuonata
  5815. SHARED NoteSuonate
  5816. SHARED OttavaSelezionata
  5817. SHARED PeriFreq()
  5818. SHARED PrimaVoltaNellEditoreSequenza
  5819. SHARED PuntoDInserimento
  5820. SHARED ScalaEventiMusicali
  5821. SHARED Sequenza()
  5822. SHARED TastoDelTopoCliccato
  5823. SHARED TastoBackspace$
  5824. SHARED TastoCursoreDestra$
  5825. SHARED TastoCursoreGiu$
  5826. SHARED TastoCursoreSinistra$
  5827. SHARED TastoCursoreSu$
  5828. SHARED TastoEsc$
  5829. SHARED TicPerCinquantesimoDiSecondo
  5830. SHARED TipoDiEventoMusicaleDiBase$
  5831. SHARED TipoDiNota()
  5832. SHARED XInizioAreaVisibile
  5833. SHARED XLunSlider
  5834. SHARED XTopo
  5835. SHARED YInizioAreaVisibile
  5836. SHARED YLunSlider
  5837. SHARED YTopo
  5838.  
  5839. ;-----------------------------------------------------------------------
  5840. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  5841. ;sets text menu colour to the brightest available
  5842. ;-------------------------------------------------
  5843.  MenuColour 3
  5844.  
  5845.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  5846.  TipoFinestra.l=#GadgetNascondiFinestra+#GadgetChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  5847.  DurataSequenza=Max(Sequenza()\Durata,(#TicDiBasePerQuarto*4.0*Battiti)/Misure)
  5848.  EventiMusicali=Sequenza()\EventiMusicali
  5849.  EventiMusicaliSelezionati=Sequenza()\EventiMusicaliSelezionati
  5850.  Window #FinestraEditoreSequenza,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1
  5851.  MostraIlTitoloDellaFinestraDellEditoreSequenza{}
  5852.  LarghezzaInternaFinestraEditoreSequenza=InnerWidth
  5853.  AltezzaInternaFinestraEditoreSequenza=InnerHeight
  5854.  CloseWindow #FinestraEditoreSequenza
  5855.  
  5856.  AreaInvisibileDelleNote.b=128-(AltezzaInternaFinestraEditoreSequenza-8-8)/8
  5857.  
  5858.  AreaVisibileDeiValori.w=(128-AreaInvisibileDelleNote)*8-1-7
  5859.  
  5860.  XLunSlider=16
  5861.  YLunSlider=AltezzaInternaFinestraEditoreSequenza-8-8
  5862.  ImpostaSlider{1,0,0,"VERTICAL",0,#ListaGadgetEditoreSequenza}
  5863.  
  5864.  XLunSlider=LarghezzaInternaFinestraEditoreSequenza-16
  5865.  YLunSlider=8
  5866.  ImpostaSlider{2,16,AltezzaInternaFinestraEditoreSequenza-8-8,"HORIZONTAL",0,#ListaGadgetEditoreSequenza}
  5867.  
  5868.  Window #FinestraEditoreSequenza,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1,#ListaGadgetEditoreSequenza
  5869.  MostraIlTitoloDellaFinestraDellEditoreSequenza{}
  5870.  
  5871. ;----------------------------------------------
  5872. ;imposta la fonte di caratteri per la finestra
  5873. ;sets the font for the window
  5874. ;-----------------------------
  5875.  WindowFont #FonteDiCaratteriTopaz8
  5876.  
  5877.  WJam #DueColoriConSfondoPieno
  5878.  
  5879.  SetZone 0,0,0,LarghezzaInternaFinestraEditoreSequenza-1,AltezzaInternaFinestraEditoreSequenza-1-8-8
  5880.  
  5881.  MostraLaScalaDegliEventiMusicali{False}
  5882.  SetZone 1,0,AltezzaInternaFinestraEditoreSequenza-8-8,7,AltezzaInternaFinestraEditoreSequenza-8-8+7
  5883.  SetZone 2,8,AltezzaInternaFinestraEditoreSequenza-8-8,15,AltezzaInternaFinestraEditoreSequenza-8-8+7
  5884.  
  5885.  Format "00"
  5886.  For Canale.b=1 To 16
  5887.   X0Canale.w=(Canale-1)*16:Y0Canale.w=AltezzaInternaFinestraEditoreSequenza-8
  5888.   WLocate X0Canale,Y0Canale
  5889.   If Canale=CanaleSelezionato
  5890.    WColour Canale-1,16-Canale
  5891.   Else
  5892.    If ColoriOriginali=True
  5893.     WColour Canale MOD 2+1,Canale MOD 2
  5894.    Else
  5895.     WColour 10+(Canale MOD 2)*2,9+(Canale MOD 2)*2
  5896.    EndIf
  5897.   EndIf
  5898.   Print Canale
  5899.   SetZone Canale+2,X0Canale,Y0Canale,X0Canale+15,Y0Canale+7
  5900.  Next Canale
  5901.  Format ""
  5902.  SetZone Canale+2,X0Canale+16,Y0Canale,#LarghezzaPulsantiEditoreSequenza-1,Y0Canale+7
  5903.  WLocate X0Canale+16,Y0Canale
  5904.  If MostraSoloGliEventiMusicaliDelCanaleSelezionato=True Then WColour 3,2 Else WColour 2,1
  5905.  Print "Alone"
  5906. ; WLocate X0Canale+16,Y0Canale
  5907. ; If ColoriOriginali=True Then WColour 2,1 Else WColour 14,13
  5908. ; Print "All":SetZone 19,X0Canale+16,Y0Canale,X0Canale+16+23,Y0Canale+7
  5909. ; WLocate X0Canale+16+8*3,Y0Canale
  5910. ; If ColoriOriginali=True Then WColour 1,0 Else WColour 15,14
  5911. ; Print "None":SetZone 20,X0Canale+16+8*3,Y0Canale,X0Canale+16+8*3+8*4-1,Y0Canale+7
  5912. ; WLocate X0Canale+16+8*3+8*4,Y0Canale
  5913. ; If ColoriOriginali=True Then WColour 2,1 Else WColour 14,13
  5914. ; Print "Toggle":SetZone 21,X0Canale+16+8*3+8*4,Y0Canale,X0Canale+16+8*3+8*4+8*6-1,Y0Canale+7
  5915.  If PrimaVoltaNellEditoreSequenza=True
  5916.  
  5917. ;--------------------------------------------------------------------------
  5918. ;questa variabile indica la nota d'inizio delle note nell'editore sequenza
  5919. ;this variable states the beginning note in the sequence editor
  5920. ;---------------------------------------------------------------
  5921.   YInizioAreaVisibile=127-(127-AreaInvisibileDelleNote)-#_MiddleC
  5922.  EndIf
  5923.  
  5924.  Repeat
  5925.   If SecondoClicDelTopo.b=False
  5926.    AreaInvisibileDelTempo=DurataSequenza-(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  5927.    AreaInvisibileDelTempo=Max(AreaInvisibileDelTempo,0)
  5928.    MostraSliderEditoreSequenza{}
  5929.    ImpostaMenuEditoreSequenza{}
  5930.    MostraIlTitoloDellaFinestraDellEditoreSequenza{}
  5931.    MostraLeNoteDiSfondoConILoroNomi{}
  5932.    MostraLeBattute{}
  5933.    MostraGliEventiMusicali{}
  5934.    MostraIlPuntoDInserimento{}
  5935.    SecondoClicDelTopo=True
  5936.   EndIf
  5937.   If PrimaVoltaNellEditoreSequenza=True
  5938.    MostraITastiDaUsare{}
  5939.    MostraLaMappaturaDelleNoteSullaTastiera{}
  5940.    PrimaVoltaNellEditoreSequenza=False
  5941.   EndIf
  5942.   If NotaSuonata\Stato=True
  5943.    Nota.b=NotaSuonata\Evento:FineNota.l=NotaSuonata\Durata-1
  5944.    VelocitaNota.b=NotaSuonata\Valore:CanaleNota.b=NotaSuonata\Canale
  5945.    DurataNota.l=(Timer-TempoTrascorso.l)*TicPerCinquantesimoDiSecondo
  5946.    If DurataNota>FineNota
  5947.     SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,#EseguiGliEventiMusicaliDallEditoreSequenza}
  5948.     NotaSuonata\Stato=False
  5949.    EndIf
  5950.   EndIf
  5951.   If NoteSuonate>0 AND NotaSuonata\Stato=False
  5952.    If NoteSuonate=1 Then Messaggio$="There is a note" Else Messaggio$="There are "+Str$(NoteSuonate)+" notes"
  5953.    Messaggio$+" still playing:|clicking on OK you will stop "
  5954.    If NoteSuonate=1 Then Messaggio$+"this." Else Messaggio$+"these."
  5955.    EZRequest "AmySequencer message",Messaggio$,"OK"
  5956.    InterrompiTutteLeNote{#EseguiGliEventiMusicaliDallEditoreSequenza}
  5957.    NoteSuonate=0
  5958.   EndIf
  5959.   EventoFinestraEditoreSequenza.l=Event
  5960.   Select EventoFinestraEditoreSequenza
  5961.   Case #HaiPremutoUnTastoDelTopo
  5962.    XTopo=WMouseX:YTopo=WMouseY:TastoDelTopoCliccato=MButtons
  5963.    ZonaTopo.b=Zone(XTopo,YTopo)
  5964.    Select TastoDelTopoCliccato
  5965.    Case #TastoSinistroPremutoDelTopo
  5966.     Select ZonaTopo
  5967.     Case 0
  5968.      Selezione{#SelezionaUnEventoMusicale}
  5969.     Case 1
  5970.      ScalaEventiMusicali/2:If ScalaEventiMusicali=0 Then ScalaEventiMusicali=64
  5971.      MostraLaScalaDegliEventiMusicali{True}
  5972.     Case 2
  5973.      ScalaEventiMusicali+ScalaEventiMusicali:If ScalaEventiMusicali=128 Then ScalaEventiMusicali=1
  5974.      MostraLaScalaDegliEventiMusicali{True}
  5975.     Case 3
  5976.      Format "00"
  5977.      If CanaleSelezionato>0
  5978.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5979.       If ColoriOriginali=True
  5980.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5981.       Else
  5982.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5983.       EndIf
  5984.       Print Str$(CanaleSelezionato)
  5985.      EndIf
  5986.      CanaleSelezionato=1:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  5987.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5988.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  5989.      Print Str$(CanaleSelezionato)
  5990.      Format ""
  5991.     Case 4
  5992.      Format "00"
  5993.      If CanaleSelezionato>0
  5994.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5995.       If ColoriOriginali=True
  5996.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5997.       Else
  5998.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5999.       EndIf
  6000.       Print Str$(CanaleSelezionato)
  6001.      EndIf
  6002.      CanaleSelezionato=2:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6003.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6004.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6005.      Print Str$(CanaleSelezionato)
  6006.      Format ""
  6007.     Case 5
  6008.      Format "00"
  6009.      If CanaleSelezionato>0
  6010.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6011.       If ColoriOriginali=True
  6012.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6013.       Else
  6014.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6015.       EndIf
  6016.       Print Str$(CanaleSelezionato)
  6017.      EndIf
  6018.      CanaleSelezionato=3:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6019.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6020.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6021.      Print Str$(CanaleSelezionato)
  6022.      Format ""
  6023.     Case 6
  6024.      Format "00"
  6025.      If CanaleSelezionato>0
  6026.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6027.       If ColoriOriginali=True
  6028.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6029.       Else
  6030.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6031.       EndIf
  6032.       Print Str$(CanaleSelezionato)
  6033.      EndIf
  6034.      CanaleSelezionato=4:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6035.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6036.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  6037.      Format ""
  6038.     Case 7
  6039.      Format "00"
  6040.      If CanaleSelezionato>0
  6041.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6042.       If ColoriOriginali=True
  6043.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6044.       Else
  6045.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6046.       EndIf
  6047.       Print Str$(CanaleSelezionato)
  6048.      EndIf
  6049.      CanaleSelezionato=5:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6050.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6051.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6052.      Print Str$(CanaleSelezionato)
  6053.      Format ""
  6054.     Case 8
  6055.      Format "00"
  6056.      If CanaleSelezionato>0
  6057.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6058.       If ColoriOriginali=True
  6059.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6060.       Else
  6061.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6062.       EndIf
  6063.       Print Str$(CanaleSelezionato)
  6064.      EndIf
  6065.      CanaleSelezionato=6:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6066.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6067.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6068.      Print Str$(CanaleSelezionato)
  6069.      Format ""
  6070.     Case 9
  6071.      Format "00"
  6072.      If CanaleSelezionato>0
  6073.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6074.       If ColoriOriginali=True
  6075.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6076.       Else
  6077.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6078.       EndIf
  6079.       Print Str$(CanaleSelezionato)
  6080.      EndIf
  6081.      CanaleSelezionato=7:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6082.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6083.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6084.      Print Str$(CanaleSelezionato)
  6085.      Format ""
  6086.     Case 10
  6087.      Format "00"
  6088.      If CanaleSelezionato>0
  6089.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6090.       If ColoriOriginali=True
  6091.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6092.       Else
  6093.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6094.       EndIf
  6095.       Print Str$(CanaleSelezionato)
  6096.      EndIf
  6097.      CanaleSelezionato=8:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6098.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6099.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6100.      Print Str$(CanaleSelezionato)
  6101.      Format ""
  6102.     Case 11
  6103.      Format "00"
  6104.      If CanaleSelezionato>0
  6105.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6106.       If ColoriOriginali=True
  6107.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6108.       Else
  6109.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6110.       EndIf
  6111.       Print Str$(CanaleSelezionato)
  6112.      EndIf
  6113.      CanaleSelezionato=9:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6114.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6115.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6116.      Print Str$(CanaleSelezionato)
  6117.      Format ""
  6118.     Case 12
  6119.      Format "00"
  6120.      If CanaleSelezionato>0
  6121.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6122.       If ColoriOriginali=True
  6123.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6124.       Else
  6125.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6126.       EndIf
  6127.       Print Str$(CanaleSelezionato)
  6128.      EndIf
  6129.      CanaleSelezionato=10:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6130.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6131.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6132.      Print Str$(CanaleSelezionato)
  6133.      Format ""
  6134.     Case 13
  6135.      Format "00"
  6136.      If CanaleSelezionato>0
  6137.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6138.       If ColoriOriginali=True
  6139.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6140.       Else
  6141.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6142.       EndIf
  6143.       Print Str$(CanaleSelezionato)
  6144.      EndIf
  6145.      CanaleSelezionato=11:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6146.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6147.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6148.      Print Str$(CanaleSelezionato)
  6149.      Format ""
  6150.     Case 14
  6151.      Format "00"
  6152.      If CanaleSelezionato>0
  6153.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6154.       If ColoriOriginali=True
  6155.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6156.       Else
  6157.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6158.       EndIf
  6159.       Print Str$(CanaleSelezionato)
  6160.      EndIf
  6161.      CanaleSelezionato=12:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6162.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6163.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6164.      Print Str$(CanaleSelezionato)
  6165.      Format ""
  6166.     Case 15
  6167.      Format "00"
  6168.      If CanaleSelezionato>0
  6169.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6170.       If ColoriOriginali=True
  6171.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6172.       Else
  6173.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6174.       EndIf
  6175.       Print Str$(CanaleSelezionato)
  6176.      EndIf
  6177.      CanaleSelezionato=13:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6178.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6179.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6180.      Print Str$(CanaleSelezionato)
  6181.      Format ""
  6182.     Case 16
  6183.      Format "00"
  6184.      If CanaleSelezionato>0
  6185.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6186.       If ColoriOriginali=True
  6187.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6188.       Else
  6189.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6190.       EndIf
  6191.       Print Str$(CanaleSelezionato)
  6192.      EndIf
  6193.      CanaleSelezionato=14:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6194.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6195.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6196.      Print Str$(CanaleSelezionato)
  6197.      Format ""
  6198.     Case 17
  6199.      Format "00"
  6200.      If CanaleSelezionato>0
  6201.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6202.       If ColoriOriginali=True
  6203.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6204.       Else
  6205.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6206.       EndIf
  6207.       Print Str$(CanaleSelezionato)
  6208.      EndIf
  6209.      CanaleSelezionato=15:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6210.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6211.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6212.      Print Str$(CanaleSelezionato)
  6213.      Format ""
  6214.     Case 18
  6215.      Format "00"
  6216.      If CanaleSelezionato>0
  6217.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6218.       If ColoriOriginali=True
  6219.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6220.       Else
  6221.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6222.       EndIf
  6223.       Print Str$(CanaleSelezionato)
  6224.      EndIf
  6225.      CanaleSelezionato=16:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6226.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6227.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6228.      Print Str$(CanaleSelezionato)
  6229.      Format ""
  6230.     Case 19
  6231.      MostraSoloGliEventiMusicaliDelCanaleSelezionato=NOT MostraSoloGliEventiMusicaliDelCanaleSelezionato
  6232.      WLocate 16*16,AltezzaInternaFinestraEditoreSequenza-8
  6233.      If MostraSoloGliEventiMusicaliDelCanaleSelezionato=True Then WColour 3,2 Else WColour 2,1
  6234.      Print "Alone"
  6235.     End Select
  6236.     TempoTrascorso.l=Timer
  6237.     SecondoClicDelTopo=False
  6238.    Case #TastoSinistroDelTopoRilasciato
  6239.     If Timer-TempoTrascorso>49 AND ZonaTopo=0
  6240.      Selezione{#SelezionaGliEventiMusicaliUguali}
  6241.      SecondoClicDelTopo=False
  6242.     Else
  6243.      SecondoClicDelTopo=True
  6244.     EndIf
  6245.    End Select
  6246. ;  Case #HaiPremutoUnGadget
  6247. ;   Select GadgetHit
  6248. ;   Case 1
  6249. ;    AltezzaSlider.w=AltezzaInternaFinestraEditoreSequenza-8-8
  6250. ;    YInizioAreaVisibile=ValoreSlider{1,AreaInvisibileDelleNote,AltezzaSlider,"VERTICAL",#ListaGadgetEditoreSequenza}
  6251. ;   Case 2
  6252. ;    LunghezzaSlider.w=LarghezzaInternaFinestraEditoreSequenza-16
  6253. ;    XInizioAreaVisibile=ValoreSlider{2,AreaInvisibileDelTempo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetEditoreSequenza}
  6254. ;    XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  6255. ;   End Select
  6256.   Case #HaiRilasciatoUnGadget
  6257.    Select GadgetHit
  6258.    Case 1
  6259.     AltezzaSlider.w=AltezzaInternaFinestraEditoreSequenza-8-8
  6260.     YInizioAreaVisibile=ValoreSlider{1,AreaInvisibileDelleNote,AltezzaSlider,"VERTICAL",#ListaGadgetEditoreSequenza}
  6261.    Case 2
  6262.     LunghezzaSlider.w=LarghezzaInternaFinestraEditoreSequenza-16
  6263.     XInizioAreaVisibile=ValoreSlider{2,AreaInvisibileDelTempo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetEditoreSequenza}
  6264.     XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  6265.    End Select
  6266.    SecondoClicDelTopo=False
  6267.   Case #HaiAttivatoIlMenu
  6268.    If MenuHit=0 AND ItemHit=0 Then EseguiGliEventiMusicali{#EseguiGliEventiMusicaliDallEditoreSequenza}
  6269.    If MenuHit=0 AND ItemHit=1 Then RegistraGliEventiMusicali{#EseguiGliEventiMusicaliDallEditoreSequenza}
  6270.  
  6271.    If MenuHit=1 AND ItemHit=0 Then Selezione{#SelezionaTuttiGliEventiMusicali}
  6272.    If MenuHit=1 AND ItemHit=1 Then Selezione{#DeselezionaTuttiGliEventiMusicali}
  6273.    If MenuHit=1 AND ItemHit=2 Then Selezione{#InvertiLaSelezioneDiTuttiGliEventiMusicali}
  6274.    If MenuHit=1 AND ItemHit=3 Then Selezione{#TagliaGliEventiMusicaliSelezionati}
  6275.    If MenuHit=1 AND ItemHit=4 Then Selezione{#CopiaGliEventiMusicaliSelezionati}
  6276.    If MenuHit=1 AND ItemHit=5 Then Selezione{#IncollaGliEventiMusicali}
  6277.    If MenuHit=1 AND ItemHit=6 Then Selezione{#DimenticaGliEventiMusicaliTagliatiOCopiati}
  6278.    If MenuHit=1 AND ItemHit=7 Then XInizioAreaVisibile=PuntoDInserimento
  6279.  
  6280.    If MenuHit=2 AND ItemHit=0 Then TipoDiEventoMusicaleDiBase$="Note"
  6281.    If MenuHit=2 AND ItemHit=1 Then TipoDiEventoMusicaleDiBase$="Program"
  6282.    If MenuHit=2 AND ItemHit=2 Then TipoDiEventoMusicaleDiBase$="Control"
  6283.    If MenuHit=2 AND ItemHit=3 Then TipoDiEventoMusicaleDiBase$="PolyAftertouch"
  6284.    If MenuHit=2 AND ItemHit=4 Then TipoDiEventoMusicaleDiBase$="MonoAftertouch"
  6285.    If MenuHit=2 AND ItemHit=5 Then TipoDiEventoMusicaleDiBase$="PitchBend"
  6286.    If MenuHit=2 AND ItemHit=6 Then TipoDiEventoMusicaleDiBase$="Tempo"
  6287.    If MenuHit=2 AND ItemHit=7 Then TipoDiEventoMusicaleDiBase$="BPM"
  6288.    If MenuHit=2 AND ItemHit=8 Then MostraSoloGliEventiMusicaliDelloStessoTipo=NOT MostraSoloGliEventiMusicaliDelloStessoTipo
  6289.  
  6290.    If MenuHit=3 AND ItemHit=0 Then CambiaLEventoBase{}
  6291.    If MenuHit=3 AND ItemHit=1 Then MostraNuovoValore=NOT MostraNuovoValore
  6292.  
  6293.    If MenuHit=4 AND ItemHit=0 Then MostraITastiDaUsare{}
  6294.    If MenuHit=4 AND ItemHit=1 Then MostraLaMappaturaDelleNoteSullaTastiera{}
  6295.  
  6296.    SecondoClicDelTopo=False
  6297.   Case #HaiChiusoLaFinestra
  6298.    EsciDallEditoreSequenza.b=True
  6299.   Case #HaiPremutoUnTasto
  6300.    TastoPremuto$=LCase$(Inkey$):TastoRiga.w=RawKey
  6301.    If TastoPremuto$=TastoEsc$ Then EsciDallEditoreSequenza=True
  6302.    Select TastoRiga
  6303.    Case 2
  6304.     Nota$="C#2"
  6305.    Case 3
  6306.     Nota$="D#2"
  6307.    Case 5
  6308.     Nota$="F#2"
  6309.    Case 6
  6310.     Nota$="G#2"
  6311.    Case 7
  6312.     Nota$="A#2"
  6313.    Case 16
  6314.     Nota$="C2"
  6315.    Case 17
  6316.     Nota$="D2"
  6317.    Case 18
  6318.     Nota$="E2"
  6319.    Case 19
  6320.     Nota$="F2"
  6321.    Case 20
  6322.     Nota$="G2"
  6323.    Case 21
  6324.     Nota$="A2"
  6325.    Case 22
  6326.     Nota$="B2"
  6327.    Case 33
  6328.     Nota$="C#1"
  6329.    Case 34
  6330.     Nota$="D#1"
  6331.    Case 36
  6332.     Nota$="F#1"
  6333.    Case 37
  6334.     Nota$="G#1"
  6335.    Case 38
  6336.     Nota$="A#1"
  6337.    Case 49
  6338.     Nota$="C1"
  6339.    Case 50
  6340.     Nota$="D1"
  6341.    Case 51
  6342.     Nota$="E1"
  6343.    Case 52
  6344.     Nota$="F1"
  6345.    Case 53
  6346.     Nota$="G1"
  6347.    Case 54
  6348.     Nota$="A1"
  6349.    Case 55
  6350.     Nota$="B1"
  6351.    Case 80
  6352.     OttavaSelezionata=0
  6353.    Case 81
  6354.     OttavaSelezionata=1
  6355.    Case 82
  6356.     OttavaSelezionata=2
  6357.    Case 83
  6358.     OttavaSelezionata=3
  6359.    Case 84
  6360.     OttavaSelezionata=4
  6361.    Case 85
  6362.     OttavaSelezionata=5
  6363.    Case 86
  6364.     OttavaSelezionata=6
  6365.    Case 87
  6366.     OttavaSelezionata=7
  6367.    Case 88
  6368.     OttavaSelezionata=8
  6369.    Case 89
  6370.     OttavaSelezionata=9
  6371.    Default
  6372.     TastoRiga=0
  6373.    End Select
  6374.    If TastoRiga>0
  6375.     If TastoRiga<80
  6376.      AggiungiUnaNotaDallaTastiera{Nota$}
  6377.     Else
  6378.      YInizioAreaVisibile=Max(127-(127-AreaInvisibileDelleNote)-OttavaSelezionata*12,0)
  6379.     EndIf
  6380.    EndIf
  6381.    TastiShiftPremuti.b=(Qualifier-$8000) & %11
  6382.    If EventiMusicaliSelezionati>0
  6383.     If TastiShiftPremuti>0
  6384.      Select TastoPremuto$
  6385.      Case TastoBackspace$
  6386.       Selezione{#EliminaGliEventiMusicaliSelezionati}
  6387.      Case TastoCursoreSu$
  6388.       If TipoDiEventoMusicaleDiBase$="Note" Then Selezione{#AlzaDiUnOttavaLeNoteSelezionate}
  6389.       If TipoDiEventoMusicaleDiBase$="Program" Then Selezione{#AggiungiDieciAgliEventiMusicaliSelezionati}
  6390.       If TipoDiEventoMusicaleDiBase$="Control" Then Selezione{#AggiungiDieciAgliEventiMusicaliSelezionati}
  6391.       If TipoDiEventoMusicaleDiBase$="PolyAftertouch" Then Selezione{#AggiungiDieciAgliEventiMusicaliSelezionati}
  6392.       If TipoDiEventoMusicaleDiBase$="MonoAftertouch" Then Selezione{#AggiungiDieciAgliEventiMusicaliSelezionati}
  6393.       If TipoDiEventoMusicaleDiBase$="Tempo" Then Selezione{#AggiungiUnaMisuraAlTempoSelezionato}
  6394.       If TipoDiEventoMusicaleDiBase$="BPM" Then Selezione{#AggiungiDieciAgliEventiMusicaliSelezionati}
  6395.      Case TastoCursoreGiu$
  6396.       If TipoDiEventoMusicaleDiBase$="Note" Then Selezione{#AbbassaDiUnOttavaLeNoteSelezionate}
  6397.       If TipoDiEventoMusicaleDiBase$="Program" Then Selezione{#SottraiDieciAgliEventiMusicaliSelezionati}
  6398.       If TipoDiEventoMusicaleDiBase$="Control" Then Selezione{#SottraiDieciAgliEventiMusicaliSelezionati}
  6399.       If TipoDiEventoMusicaleDiBase$="PolyAftertouch" Then Selezione{#SottraiDieciAgliEventiMusicaliSelezionati}
  6400.       If TipoDiEventoMusicaleDiBase$="MonoAftertouch" Then Selezione{#SottraiDieciAgliEventiMusicaliSelezionati}
  6401.       If TipoDiEventoMusicaleDiBase$="Tempo" Then Selezione{#TogliUnaMisuraAlTempoSelezionato}
  6402.       If TipoDiEventoMusicaleDiBase$="BPM" Then Selezione{#SottraiDieciAgliEventiMusicaliSelezionati}
  6403.      Case TastoCursoreDestra$
  6404.       If TipoDiEventoMusicaleDiBase$="Note" Then Selezione{#AllungaLaDurataDelleNoteSelezionate}
  6405.      Case TastoCursoreSinistra$
  6406.       If TipoDiEventoMusicaleDiBase$="Note" Then Selezione{#RiduciLaDurataDelleNoteSelezionate}
  6407.      End Select
  6408.     Else
  6409.      Select TastoPremuto$
  6410.      Case TastoBackspace$
  6411.       If LastItem(EventoMusicale())=True
  6412.        If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato Then EventiMusicaliSelezionati-1
  6413.        DurataEventoMusicale.l=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  6414.        DurataSequenza-DurataEventoMusicale
  6415.        XInizioAreaVisibile-DurataEventoMusicale
  6416.        XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  6417.        KillItem EventoMusicale():EventiMusicali-1
  6418.       EndIf
  6419.      Case TastoCursoreSu$
  6420.       If TipoDiEventoMusicaleDiBase$="Tempo"
  6421.        Selezione{#AggiungiUnBattitoAlTempoSelezionato}
  6422.       Else
  6423.        Selezione{#AlzaDiUnoGliEventiMusicaliSelezionati}
  6424.       EndIf
  6425.      Case TastoCursoreGiu$
  6426.       If TipoDiEventoMusicaleDiBase$="Tempo"
  6427.        Selezione{#TogliUnBattitoAlTempoSelezionato}
  6428.       Else
  6429.        Selezione{#AbbassaDiUnoGliEventiMusicaliSelezionati}
  6430.       EndIf
  6431.      Case TastoCursoreDestra$
  6432.       Selezione{#SpostaAvantiNelTempoGliEventiMusicaliSelezionati}
  6433.      Case TastoCursoreSinistra$
  6434.       Selezione{#SpostaIndietroNelTempoGliEventiMusicaliSelezionati}
  6435.      End Select
  6436.     EndIf
  6437.    Else
  6438.     If TastiShiftPremuti>0
  6439.      Select TastoPremuto$
  6440.      Case TastoBackspace$
  6441.       If LastItem(EventoMusicale())=True
  6442.        If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato Then EventiMusicaliSelezionati-1
  6443.        DurataEventoMusicale=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  6444.        DurataSequenza-DurataEventoMusicale
  6445.        XInizioAreaVisibile-DurataEventoMusicale
  6446.        XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  6447.        KillItem EventoMusicale():EventiMusicali-1
  6448.       EndIf
  6449.      Case TastoCursoreDestra$
  6450.       PuntoDInserimento+LarghezzaEventoBase
  6451.       PuntoDInserimento=Min(PuntoDInserimento,DurataSequenza)
  6452.      Case TastoCursoreSinistra$
  6453.       PuntoDInserimento-LarghezzaEventoBase
  6454.       PuntoDInserimento=Max(PuntoDInserimento,0)
  6455.      End Select
  6456.     Else
  6457.      Select TastoPremuto$
  6458.      Case TastoBackspace$
  6459.       If LastItem(EventoMusicale())=True
  6460.        If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato Then EventiMusicaliSelezionati-1
  6461.        DurataEventoMusicale=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  6462.        DurataSequenza-DurataEventoMusicale
  6463.        XInizioAreaVisibile-DurataEventoMusicale
  6464.        XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  6465.        KillItem EventoMusicale():EventiMusicali-1
  6466.       EndIf
  6467.      Case TastoCursoreSu$
  6468.       If YInizioAreaVisibile>0 Then YInizioAreaVisibile-1
  6469.      Case TastoCursoreGiu$
  6470.       If YInizioAreaVisibile<AreaInvisibileDelleNote Then YInizioAreaVisibile+1
  6471.      Case TastoCursoreDestra$
  6472.       XInizioAreaVisibile+LarghezzaEventoBase
  6473.       XInizioAreaVisibile=Min(XInizioAreaVisibile,AreaInvisibileDelTempo)
  6474.      Case TastoCursoreSinistra$
  6475.       XInizioAreaVisibile-LarghezzaEventoBase
  6476.       XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  6477.      End Select
  6478.     EndIf
  6479.    EndIf
  6480.    If TastoPremuto$=" "
  6481.     ResetList EventoMusicale()
  6482.     While NextItem(EventoMusicale())
  6483.      If EventoMusicale()\Inizio>=PuntoDInserimento
  6484.       EventoMusicale()\Inizio+LarghezzaEventoBase
  6485.      EndIf
  6486.     Wend
  6487.     PuntoDInserimento+LarghezzaEventoBase
  6488.     DurataSequenza+LarghezzaEventoBase
  6489.    EndIf
  6490.    SecondoClicDelTopo=False
  6491.   End Select
  6492.  Until EsciDallEditoreSequenza=True
  6493.  Sequenza()\EventiMusicali=EventiMusicali
  6494.  Sequenza()\EventiMusicaliSelezionati=EventiMusicaliSelezionati
  6495.  Sequenza()\Durata=DurataSequenza
  6496.  CloseWindow #FinestraEditoreSequenza
  6497.  Use Window #FinestraPrincipale
  6498.  WJam #UnColoreConSfondoTrasparente
  6499. End Statement
  6500.  
  6501. ;------------------------------------------------------------------------------
  6502. ;questa procedura elimina tutti gli eventi musicali della sequenza selezionata
  6503. ;this procedure deletes all the events of the selected  sequence
  6504. ;-----------------------------------------------------------------
  6505. Statement EliminaTuttiGliEventiMusicaliDellaSequenza{}
  6506. SHARED EventoMusicale()
  6507. SHARED Sequenza()
  6508. SHARED SequenzaSelezionata
  6509.  If Sequenza()\EventiMusicali>0
  6510.   ResetList EventoMusicale()
  6511.   While NextItem(EventoMusicale())=True
  6512.    If EventoMusicale()\Sequenza=SequenzaSelezionata
  6513.     If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato
  6514.      Sequenza()\EventiMusicaliSelezionati-1
  6515.     EndIf
  6516.     Sequenza()\EventiMusicali-1
  6517.     KillItem EventoMusicale()
  6518.    EndIf
  6519.   Wend
  6520.  EndIf
  6521. End Statement
  6522.  
  6523. ;-----------------------------------------------------------
  6524. ;questa procedura cambia il nome della sequenza selezionata
  6525. ;this procedure change the selected sequence's name
  6526. ;---------------------------------------------------
  6527. Statement CambiaIlNomeDellaSequenzaSelezionata{}
  6528. SHARED Sequenza()
  6529. SHARED SequenzaSelezionata
  6530.  Use Window #FinestraPrincipale
  6531.  WJam #DueColoriConSfondoPieno
  6532.  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  6533.  WLocate 0,0:WColour 3:Print "Please type the new name for the sequence>"
  6534.  NuovoNomeDellaSequenzaSelezionata$=StripLead$(StripTrail$(Edit$("Sequence "+Str$(SequenzaSelezionata),39),Asc(" ")),Asc(" "))
  6535.  If NuovoNomeDellaSequenzaSelezionata$<>"" Then Sequenza()\Nome=NuovoNomeDellaSequenzaSelezionata$
  6536.  WJam #UnColoreConSfondoTrasparente
  6537. End Statement
  6538.  
  6539. ;---------------------------------------------
  6540. ;questa procedura mostra la sequenza indicata
  6541. ;this procedure shows the stated sequence
  6542. ;-----------------------------------------
  6543. Statement MostraSequenza{Nome$,Inizio.l,Durata.l,Traccia,EventiMusicali.l,ModoDisegno.b}
  6544. SHARED AltezzaInternaFinestraPrincipale
  6545. SHARED LarghezzaInternaFinestraPrincipale
  6546. SHARED Sequenza
  6547. SHARED TracceVisibili
  6548. SHARED XTracceVisibili
  6549. SHARED YTracceVisibili
  6550.  Y0.w=(Traccia-YTracceVisibili)*8:Y1.w=Y0+7
  6551.  If Y0>=8 AND Y1<8+TracceVisibili*8
  6552.   Fine.l=Inizio+Durata-1
  6553.   I.w=16+Inizio-XTracceVisibili
  6554.   F.w=16+Fine-XTracceVisibili
  6555.   If I>=16 AND I<LarghezzaInternaFinestraPrincipale
  6556.    InizioSequenzaVisibile.b=True
  6557.   Else
  6558.    InizioSequenzaVisibile=False
  6559.   EndIf
  6560.   If F>=16 AND F<LarghezzaInternaFinestraPrincipale
  6561.    FineSequenzaVisibile.b=True
  6562.   Else
  6563.    FineSequenzaVisibile=False
  6564.   EndIf
  6565.   If I<16 AND F>LarghezzaInternaFinestraPrincipale
  6566.    SequenzaVisibile.b=True
  6567.   Else
  6568.    If InizioSequenzaVisibile=True OR FineSequenzaVisibile=True
  6569.     SequenzaVisibile=True
  6570.    Else
  6571.     SequenzaVisibile=False
  6572.    EndIf
  6573.   EndIf
  6574.   If SequenzaVisibile=True
  6575.    X0Sequenza.w=Min(Max(I,16),LarghezzaInternaFinestraPrincipale-1)
  6576.    Y0Sequenza.w=Min(Max(Y0,8),AltezzaInternaFinestraPrincipale-1-8-8-4-7)
  6577.    X1Sequenza.w=Min(Max(F,16),LarghezzaInternaFinestraPrincipale-1)
  6578.    Y1Sequenza.w=Min(Max(Y1,8+7),AltezzaInternaFinestraPrincipale-1-8-8-4)
  6579.    ColoreSequenza.b=(Sequenza-1) MOD 16
  6580.    WBox X0Sequenza,Y0Sequenza,X1Sequenza,Y1Sequenza,ColoreSequenza
  6581.    If ModoDisegno=#SequenzaSelezionata
  6582.     Wline X0Sequenza,Y0,X1Sequenza,Y1,15-ColoreSequenza
  6583.     Wline X0Sequenza,Y1,X1Sequenza,Y0,15-ColoreSequenza
  6584.    EndIf
  6585.    If ModoDisegno=#SequenzaNonSelezionata
  6586.     Wline X0Sequenza+1,Y0Sequenza+1,X1Sequenza-1,Y0Sequenza+1,15-ColoreSequenza
  6587.     Wline X0Sequenza+1,Y1Sequenza-1,X1Sequenza-1,Y1Sequenza-1,15-ColoreSequenza
  6588.    EndIf
  6589.    If ModoDisegno=#SequenzaNonSelezionata
  6590.     If InizioSequenzaVisibile=True
  6591.      Wline I+1,Y0Sequenza+1,I+1,Y1Sequenza-1,15-ColoreSequenza
  6592.     EndIf
  6593.     If FineSequenzaVisibile=True
  6594.      Wline F-1,Y0Sequenza+1,F-1,Y1Sequenza-1,15-ColoreSequenza
  6595.     EndIf
  6596.    EndIf
  6597.    If Nome$="" Then Nome$="Sequence "+Str$(Sequenza)
  6598.    If I>=16 OR I<LarghezzaInternaFinestraPrincipale OR F>=16 OR F<LarghezzaInternaFinestraPrincipale
  6599.     WColour 15-ColoreSequenza,ColoreSequenza
  6600.     I=Max(I,16):F=Min(F,LarghezzaInternaFinestraPrincipale-1)
  6601.     WLocate I,Y0Sequenza:Print Left$(Nome$,(F-I+1)/8)
  6602.    EndIf
  6603.   EndIf
  6604.  EndIf
  6605. End Statement
  6606.  
  6607. ;--------------------------------------------------------------
  6608. ;questa procedura mostra le sequenze nella finestra principale
  6609. ;this procedure show the sequences in the main window
  6610. ;-----------------------------------------------------
  6611. Statement MostraLeSequenze{}
  6612. SHARED FineMotivo
  6613. SHARED LarghezzaInternaFinestraPrincipale
  6614. SHARED Sequenza
  6615. SHARED Sequenza()
  6616. SHARED SequenzaSelezionata
  6617. SHARED TracceVisibili
  6618. SHARED Traccia()
  6619. SHARED XTracceVisibili
  6620. SHARED YTracceVisibili
  6621.  FineMotivo=0
  6622.  Sequenza=0
  6623.  PushItem Sequenza()
  6624.  ResetList Sequenza()
  6625.  While NextItem(Sequenza())=True
  6626.   Sequenza+1
  6627.   TracciaSequenza.w=Sequenza()\Traccia
  6628.   If TracciaSequenza>0
  6629.    DurataSequenza.l=Sequenza()\Durata
  6630.    If DurataSequenza>0
  6631.     PosizioneSequenza.w=(TracciaSequenza-YTracceVisibili)*8
  6632.     If PosizioneSequenza>=8 AND PosizioneSequenza<8+TracceVisibili*8
  6633.      NomeSequenza$=Sequenza()\Nome
  6634.      InizioSequenza.l=Sequenza()\Inizio
  6635.      EventiMusicaliSequenza.l=Sequenza()\EventiMusicali
  6636.      If Sequenza=SequenzaSelezionata Then ModoDisegno.b=#SequenzaSelezionata Else ModoDisegno=#SequenzaNonSelezionata
  6637.      MostraSequenza{NomeSequenza$,InizioSequenza,DurataSequenza,TracciaSequenza,EventiMusicaliSequenza,ModoDisegno}
  6638.      FineMotivo=Max(FineMotivo,InizioSequenza+DurataSequenza)
  6639.     EndIf
  6640.     Traccia(TracciaSequenza-1)=True
  6641.    EndIf
  6642.   Else
  6643.    Traccia(TracciaSequenza-1)=False
  6644.   EndIf
  6645.  Wend
  6646.  PopItem Sequenza()
  6647.  For Traccia.b=1 To TracceVisibili
  6648.   If Traccia(YTracceVisibili+Traccia-1)=False
  6649.    WLocate 16,Traccia*8:WColour 3,0:Print "Track ",Str$(YTracceVisibili+Traccia)," empty"
  6650.   EndIf
  6651.  Next Traccia
  6652. End Statement
  6653.  
  6654. Statement MostraSliderFinestraPrincipale{}
  6655. SHARED AreaInvisibileDelMotivo
  6656. SHARED BattutePerMinuto
  6657. SHARED FineMotivo
  6658. SHARED LarghezzaInternaFinestraPrincipale
  6659. SHARED TracceVisibili
  6660. SHARED XTracceVisibili
  6661. SHARED YTracceVisibili
  6662. ;-------------------------------------------------------------------------
  6663. ;imposta la barra di scorrimento della velocita' di esecuzione delle note
  6664. ;sets the notes execution velocity slider
  6665. ;-----------------------------------------
  6666.  MostraSlider{1,BattutePerMinuto-10,300-9,"HORIZONTAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  6667.  
  6668. ;----------------------------
  6669. ;mostra le sequenze visibili
  6670. ;shows the visible sequences
  6671. ;----------------------------
  6672.  MostraSlider{2,YTracceVisibili,#MassimoTracce-TracceVisibili,"VERTICAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  6673.  
  6674. ;-------------------------------------
  6675. ;calcola l'area invisibile del motivo
  6676. ;evaluate the motive's invisible area
  6677. ;-------------------------------------
  6678.  AreaInvisibileDelMotivo=Max(FineMotivo-(LarghezzaInternaFinestraPrincipale-16),0)
  6679.  
  6680. ;----------------------------
  6681. ;mostra le sequenze visibili
  6682. ;shows the visible sequences
  6683. ;----------------------------
  6684.  MostraSlider{3,XTracceVisibili,AreaInvisibileDelMotivo,"HORIZONTAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  6685.  
  6686. End Statement
  6687.  
  6688. ;*********************************************
  6689. ;Fine delle procedure ed inizio del programma
  6690. ;procedures end and program start
  6691. ;*********************************
  6692.  
  6693. ;----------------------------------------------------
  6694. ;questo programma puo' essere lanciato dal Workbench
  6695. ;this program can be launched from Workbench
  6696. ;_-------------------------------------------
  6697. WBStartup
  6698.  
  6699. BlitMode CookieMode
  6700.  
  6701. ;calculates the frequency and the AMIGA voice period for all the 128 notes
  6702. CalcolaLaFrequenzaEdIlPeriodoDelleNote{}
  6703.  
  6704. ;loads the Topaz8 font
  6705. CaricaLaFonteDiCaratteriTopaz8{}
  6706.  
  6707. ;sets the AMIGA speech
  6708. ImpostaIlParlatoDellAmiga{}
  6709.  
  6710. ;loads note images for the basic event window
  6711. CaricaLeImmaginiDelleNote{}
  6712.  
  6713. ;creates the background bitmap
  6714. CreaLaBitmapPerLImmagineDiSfondo{}
  6715.  
  6716. ;sets the screen
  6717. ImpostaLoSchermo{}
  6718.  
  6719. ;loads the background pic into its bitmap
  6720. CaricaLImmagineDiSfondoNellaBitmap{}
  6721.  
  6722. ;loads the loaded LoadedMIDIFiles history
  6723. CaricaLaStoriaDeiFileMIDIAperti{}
  6724.  
  6725. ;sets the main window
  6726. ImpostaLaFinestraPrincipale{}
  6727.  
  6728. ;puts the background pic into the main window
  6729. MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  6730.  
  6731. ;shows the main window' sliders
  6732. MostraSliderFinestraPrincipale{}
  6733.  
  6734. ;--------------------------------------------------------------------------
  6735. ;copia in memoria lo sfondo della posizione a video dell'indicazione delle
  6736. ; battute per minuto
  6737. ;copies into memory the measures per minute indication's on screen position
  6738. ; background
  6739. ;------------
  6740.  CopiaLoSfondoSottoAlleBattutePerMinuto{}
  6741.  
  6742. ;------------------------------------------------------------------------------
  6743. ;copia in memoria lo sfondo della posizione a video dell'indicazione del tempo
  6744. ;copies into memory the time indication's on screen position background
  6745. ;-----------------------------------------------------------------------
  6746.  CopiaLoSfondoSottoAlTempo{}
  6747.  
  6748. ;shows the sequences
  6749. MostraLeSequenze{}
  6750.  
  6751. ;shows the execution velocity in bar per minute
  6752.  MostraLeBattutePerMinuto{BattutePerMinuto,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6753.  
  6754. ;shows the metronomic time
  6755.  MostraIlTempo{(#MisureDiBase-1)*16+#BattitiDiBase-1,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6756.  
  6757. If ParlatoAttivato=True Then Speak "Welcome to AmySequencer!"
  6758.  
  6759. ;activates MIDI
  6760. AttivaMIDI{}
  6761.  
  6762. ;-----------------
  6763. ;clclo principale
  6764. ;main loop
  6765. ;----------
  6766. Repeat
  6767.  
  6768.  If SecondoClicDelTopo.b=False
  6769.   MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  6770.   MostraGliEventiMusicaliDisponibili{}
  6771.   MostraLeSequenze{}
  6772.   MostraLeBattutePerMinuto{BattutePerMinuto,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6773.   MostraIlTempo{(Misure-1)*16+Battiti-1,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6774.   MostraSliderFinestraPrincipale{}
  6775.   SecondoClicDelTopo=True
  6776.  EndIf
  6777.  
  6778.  If NoteSuonate>0
  6779.   If NoteSuonate=1 Then Messaggio$="There is a note" Else Messaggio$="There are "+Str$(NoteSuonate)+" notes"
  6780.   Messaggio$+" still playing:|clicking on OK you will stop "
  6781.   If NoteSuonate=1 Then Messaggio$+"this." Else Messaggio$+"these."
  6782.   EZRequest "AmySequencer message",Messaggio$,"OK"
  6783.   InterrompiTutteLeNote{#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6784.   NoteSuonate=0
  6785.  EndIf
  6786.  
  6787. ;--------------------------------------------------------------
  6788. ;questa variabile cattura gli eventi della finestra principale
  6789. ;this variable catch main window events
  6790. ;---------------------------------------
  6791.  EventoFinestraPrincipale.l=WaitEvent
  6792.  
  6793.  Select EventoFinestraPrincipale
  6794.  
  6795. ;------------------------------------
  6796. ;se avete premuto un tasto del mouse
  6797. ;if you have prssed a mouse button
  6798. ;----------------------------------
  6799.  Case #HaiPremutoUnTastoDelTopo
  6800.   XTopo=WMouseX:YTopo=WMouseY:TastoDelTopoCliccato.b=MButtons
  6801.   Select TastoDelTopoCliccato
  6802.   Case #TastoSinistroPremutoDelTopo
  6803.    If YTopo>=8 AND YTopo<8+TracceVisibili*8
  6804.     Sequenza=0
  6805.     TracciaSelezionata.w=YTopo/8+YTracceVisibili
  6806.     ResetList Sequenza()
  6807.     While NextItem(Sequenza())=True
  6808.      Sequenza+1
  6809.      TracciaSequenza.w=Sequenza()\Traccia
  6810.      InizioSequenza.l=Sequenza()\Inizio
  6811.      DurataSequenza.l=Sequenza()\Durata
  6812.      If DurataSequenza>0
  6813.       If TracciaSequenza=TracciaSelezionata
  6814.        FineSequenza.l=InizioSequenza+DurataSequenza-1
  6815.        I.w=InizioSequenza-XTracceVisibili
  6816.        F.w=FineSequenza-XTracceVisibili
  6817.        If XTopo>=I AND XTopo<=F
  6818.         SequenzaSelezionata=Sequenza
  6819.         Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileUno
  6820.        EndIf
  6821.       EndIf
  6822.      EndIf
  6823.     Wend
  6824.     LastItem Sequenza()
  6825.     If AddItem(Sequenza())=True
  6826.      Sequenza()\Traccia=TracciaSelezionata
  6827.      Sequenza()\Inizio=XTracceVisibili+XTopo-16
  6828.      Sequenza()\Durata=(#TicDiBasePerQuarto*4.0*Battiti)/Misure
  6829.     Else
  6830.      EZRequest "AmySequencer message","You have used all|the available sequences","OK"
  6831.     EndIf
  6832. FineCicloWhileUno
  6833.    EndIf
  6834.    If YTopo>AltezzaInternaFinestraPrincipale-1-8-8 AND YTopo<AltezzaInternaFinestraPrincipale-8
  6835.     If XTopo>LarghezzaInternaFinestraPrincipale-Len("Tempo=00/00")*8
  6836.      CambiaLaMisuraDelTempo{}
  6837.      MostraIlTempo{(Misure-1)*16+Battiti-1,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6838.     EndIf
  6839.    EndIf
  6840.    SecondoClicDelTopo=False
  6841.   Case #TastoSinistroDelTopoRilasciato
  6842.    SecondoClicDelTopo=True
  6843.   End Select
  6844. ;---------------------------
  6845. ;se avete premuto un gadget
  6846. ;if you have pressed a gadget
  6847. ;-----------------------------
  6848. ; Case #HaiPremutoUnGadget
  6849. ;  Select GadgetHit
  6850. ;  Case 1
  6851. ;   LunghezzaSlider.w=LarghezzaInternaFinestraPrincipale
  6852. ;   BattutePerMinuto=10+ValoreSlider{1,300-9,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  6853. ;   TicPerCinquantesimoDiSecondo=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  6854. ;  Case 2
  6855. ;   AltezzaSlider.w=AltezzaSchermo-(AltezzaFonte+3)-8-8-8
  6856. ;   YTracceVisibili=ValoreSlider{2,#MassimoTracce-TracceVisibili,LunghezzaSlider,"VERTICAL",#ListaGadgetPrincipale}
  6857. ;  Case 3
  6858. ;   LunghezzaSlider=LarghezzaInternaFinestraPrincipale-16
  6859. ;   XTracceVisibili=ValoreSlider{3,AreaInvisibileDelMotivo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  6860. ;  End Select
  6861. ;  SecondoClicDelTopo=False
  6862.  
  6863. ;------------------------------
  6864. ;se avete rilasciato un gadget
  6865. ;if you have released a gadget
  6866. ;------------------------------
  6867.  Case #HaiRilasciatoUnGadget
  6868.   Select GadgetHit
  6869.   Case 1
  6870.    LunghezzaSlider.w=LarghezzaInternaFinestraPrincipale
  6871.    BattutePerMinuto=10+ValoreSlider{1,300-9,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  6872.    TicPerCinquantesimoDiSecondo=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  6873.   Case 2
  6874.    AltezzaSlider.w=AltezzaSchermo-(AltezzaFonte+3)-8-8-8
  6875.    YTracceVisibili=ValoreSlider{2,#MassimoTracce-TracceVisibili,AltezzaSlider,"VERTICAL",#ListaGadgetPrincipale}
  6876.   Case 3
  6877.    LunghezzaSlider=LarghezzaInternaFinestraPrincipale-16
  6878.    XTracceVisibili=ValoreSlider{3,AreaInvisibileDelMotivo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  6879.   End Select
  6880.   SecondoClicDelTopo=False
  6881.  
  6882. ;--------------------------------------
  6883. ;se avete attivato il menu' principale
  6884. ;if you have activated main menu
  6885. ;--------------------------------
  6886.  Case #HaiAttivatoIlMenu
  6887.   Select MenuHit
  6888.   Case 0
  6889.    If ItemHit=1
  6890.     CaricaUnFileMIDI{""}
  6891.     ImpostaLaFinestraPrincipale{}
  6892.    EndIf
  6893.    If ItemHit>3 AND ItemHit<VoceMenuEsci
  6894.     NomeDelFileMIDI$=FileMIDIAperto$(ItemHit-4)
  6895.     CaricaUnFileMIDI{NomeDelFileMIDI$}
  6896.     ImpostaLaFinestraPrincipale{}
  6897.    EndIf
  6898.   Case 1
  6899.    Select ItemHit
  6900.    Case 0
  6901.     EseguiGliEventiMusicali{#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6902.     MostraLeBattutePerMinuto{BattutePerMinuto,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6903.     MostraIlTempo{(Misure-1)*16+Battiti-1,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6904.    Case 1
  6905.     RegistraGliEventiMusicali{#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6906.    End Select
  6907.   Case 2
  6908.    If SequenzaSelezionata>0
  6909.     Select ItemHit
  6910.     Case 0
  6911.      EditoreSequenza{}
  6912.     Case 1
  6913.      CambiaIlNomeDellaSequenzaSelezionata{}
  6914.     End Select
  6915.    Else
  6916.     EZRequest "AmySequencer message","You must select a sequence first","OK"
  6917.    EndIf
  6918.   Case 3
  6919.    If ItemHit=0 Then EditoreSuoni{}
  6920.   Case 4
  6921.    Select ItemHit
  6922.    Case 0
  6923.     AttivaMIDI{}
  6924.    Case 1
  6925.     ColoriOriginali=NOT ColoriOriginali
  6926.     CaricaLImmagineDiSfondoNellaBitmap{}
  6927.     CopiaLoSfondoSottoAlleBattutePerMinuto{}
  6928.     CopiaLoSfondoSottoAlTempo{}
  6929.    Case 2
  6930.     If Exists("LoadedMIDIFilesHistory")
  6931.      CancellaLaStoriaDeiFileMIDIAperti{}
  6932.      ImpostaLaFinestraPrincipale{}
  6933.     EndIf
  6934.    End Select
  6935.   End Select
  6936.  
  6937. ;-------------------------------------------------------------------
  6938. ;se avete scelto la voce Quit dal menu' Project attiva la variabile
  6939. ; EsciDalProgramma
  6940. ;if you have selected voice Quit from Project menu activates EsciDalProgramma
  6941. ; flag
  6942. ;------
  6943.   If MenuHit=0 AND ItemHit=VoceMenuEsci Then EsciDalProgramma=True
  6944.  
  6945.   SecondoClicDelTopo=False
  6946.  
  6947. ;--------------------------
  6948. ;se avete premuto un tasto
  6949. ;if you have pressed a key
  6950. ;--------------------------
  6951.  Case #HaiPremutoUnTasto
  6952.  
  6953. ;--------------------------------------------
  6954. ;questa variabile memorizza il tasto premuto
  6955. ;this variable store the key pressed
  6956. ;------------------------------------
  6957.   TastoPremuto$=Inkey$
  6958.  
  6959.   Select TastoPremuto$
  6960.  
  6961. ;-------------------------------------------------------------------
  6962. ;se avete premuto il tasto Esc attiva la variabile EsciDalProgramma
  6963. ;if you have typed Esc key activates EsciDalProgramma flag
  6964. ;----------------------------------------------------------
  6965.   Case TastoEsc$
  6966.    EsciDalProgramma=True
  6967.  
  6968.   Case TastoBackspace$
  6969.    If SequenzaSelezionata>0
  6970.     EliminaTuttiGliEventiMusicaliDellaSequenza{}
  6971.     TracciaVuota.w=Sequenza()\Traccia
  6972.     Sequenza()\Nome=""
  6973.     Sequenza()\Traccia=0
  6974.     Sequenza()\Inizio=0
  6975.     Sequenza()\Durata=0
  6976.     KillItem Sequenza()
  6977.     ResetList Sequenza()
  6978.     TracciaConSequenza.b=False
  6979.     While NextItem(Sequenza())
  6980.      If Sequenza()\Traccia=TracciaVuota
  6981.       TracciaConSequenza=True
  6982.       Pop While:Goto FineCicloWhileDue
  6983.      EndIf
  6984.     Wend
  6985. FineCicloWhileDue
  6986.     If TracciaConSequenza=False Then Traccia(TracciaVuota-1)=False
  6987.     SequenzaSelezionata=0
  6988.    Else
  6989.     EZRequest "AmySequencer message","You must select a sequence first","OK"
  6990.    EndIf
  6991.   Case TastoCursoreSu$
  6992.    If YTracceVisibili>0 Then YTracceVisibili-1
  6993.   Case TastoCursoreGiu$
  6994.    If YTracceVisibili<#MassimoTracce-TracceVisibili Then YTracceVisibili+1
  6995.   Case TastoCursoreDestra$
  6996.    If XTracceVisibili<AreaInvisibileDelMotivo
  6997.     XTracceVisibili+LarghezzaEventoBase
  6998.     XTracceVisibili=Min(XTracceVisibili,AreaInvisibileDelMotivo)
  6999.    EndIf
  7000.   Case TastoCursoreSinistra$
  7001.    If XTracceVisibili>0
  7002.     XTracceVisibili-LarghezzaEventoBase
  7003.     XTracceVisibili=Max(XTracceVisibili,0)
  7004.    EndIf
  7005.   End Select
  7006.   SecondoClicDelTopo=False
  7007.  
  7008.  End Select
  7009.  
  7010. ;----------------------------------------------------------------
  7011. ;ripete il ciclo se la variabile EsciDalProgramma e' disattivata
  7012. ;repeats loop if EsciDalProgramma flag is deactivated
  7013. ;-----------------------------------------------------
  7014. Until EsciDalProgramma=True
  7015.  
  7016. ;----------------------
  7017. ;fine del programma
  7018. ;program end
  7019. ;------------
  7020. End
  7021.